Android CheckedTextView 使用+實(shí)例

      網(wǎng)友投稿 1321 2022-05-30

      CheckedtextView是什么

      CheckedTextView繼承自TextView且實(shí)現(xiàn)了Checkable接口,對(duì)TextView界面和顯示進(jìn)行了擴(kuò)展的控件,支持Checkable。可以實(shí)現(xiàn)單選或多選功能,在你懶得使用兩者結(jié)合的時(shí)候,這就是不二選擇。

      主要XML屬性

      android:checkMark 按鈕樣式。

      默認(rèn)單選框樣式:android:checkMark="?android:attr/listChoiceIndicatorSingle"

      默認(rèn)復(fù)選框樣式:android:checkMark="?android:attr/listChoiceIndicatorMultiple"

      當(dāng)然也可以使用drawable自定義樣式

      android:checkMarkTint 按鈕的顏色。

      android:checkMarkTintMode 混合模式按鈕的顏色。

      android:checked 初始選中狀態(tài),默認(rèn)false。

      在點(diǎn)擊事件里判斷狀態(tài)設(shè)置狀態(tài)

      CheckedTextView.setOnClickListener(new?View.OnClickListener()?{

      @Override

      public?void?onClick(View?v)?{

      CheckedTextView.toggle();//切換選中與非選中狀態(tài)

      }

      });

      咱們看看CheckedTextView.toggle()是干嘛的

      public?void?toggle()?{

      setChecked(!mChecked);

      }

      就是實(shí)現(xiàn)這個(gè)控件的狀態(tài)反操作。

      第一次點(diǎn)擊無效

      android:focusableInTouchMode="true",這個(gè)屬性加上會(huì)導(dǎo)致第一次點(diǎn)擊觸發(fā)不了選擇事件。

      實(shí)例

      官方文檔指出,結(jié)合ListView使用更佳,咱下面通過一個(gè)栗子了解一下,下面是效果圖:

      1.主界面CheckedTextViewActivity.java

      public?class?CheckedTextViewActivity?extends?AppCompatActivity?{

      private?ListView?lv_ctv_multiple,lv_ctv_single;

      private?CtvMultipleAdapter?ctvAdapter;

      private?TextView?tv_multiple_title,tv_single_title;

      private?CtvSingleAdapter?ctvSingleAdapter;

      @Override

      protected?void?onCreate(Bundle?savedInstanceState)?{

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_textview_ctv);//加載布局文件

      initView();

      }

      private?void?initView()?{

      ArrayList?ctvString?=?new?ArrayList<>();

      ctvString.add("秦始皇嬴政");

      ctvString.add("漢高祖劉邦");

      ctvString.add("唐太宗李世民");

      ctvString.add("宋太祖趙匡胤");

      //復(fù)選

      lv_ctv_multiple?=?findViewById(R.id.lv_ctv_multiple);

      tv_multiple_title?=?findViewById(R.id.tv_multiple_title);

      ctvAdapter?=?new?CtvMultipleAdapter(this,ctvString,tv_multiple_title);

      lv_ctv_multiple.setAdapter(ctvAdapter);

      //設(shè)置Item間距

      lv_ctv_multiple.setDividerHeight(0);

      //單選

      lv_ctv_single?=?findViewById(R.id.lv_ctv_single);

      tv_single_title?=?findViewById(R.id.tv_single_title);

      ctvSingleAdapter?=?new?CtvSingleAdapter(this,ctvString,tv_single_title);

      lv_ctv_single.setAdapter(ctvSingleAdapter);

      //設(shè)置Item間距

      lv_ctv_single.setDividerHeight(0);

      }

      }

      2.主布局activity_textview_ctv.xml

      android:layout_width="match_parent"

      android:layout_height="match_parent"

      android:orientation="vertical"

      android:padding="@dimen/dimen_20">

      android:id="@+id/tv_multiple_title"

      android:layout_width="match_parent"

      android:layout_height="wrap_content"

      android:layout_marginLeft="@dimen/dimen_10"

      android:textColor="@color/black"

      android:text="復(fù)選"

      android:textSize="@dimen/text_size_16"?/>

      android:id="@+id/lv_ctv_multiple"

      android:layout_width="match_parent"

      android:layout_height="180dp"?/>

      android:id="@+id/tv_single_title"

      android:layout_width="match_parent"

      android:layout_height="wrap_content"

      android:layout_marginLeft="@dimen/dimen_10"

      android:text="單選"

      android:textColor="@color/color_188FFF"

      android:layout_marginTop="@dimen/dimen_10"

      android:textSize="@dimen/text_size_20"?/>

      android:id="@+id/lv_ctv_single"

      android:layout_width="match_parent"

      android:layout_height="match_parent"?/>

      3.復(fù)選框Adapter

      public?class?CtvMultipleAdapter?extends?BaseAdapter?{

      private?LayoutInflater?mInflater;//得到一個(gè)LayoutInfalter對(duì)象用來導(dǎo)入布局

      private?List?list;

      private?TextView?tvTitle;

      private?List?selectList?=?new?ArrayList<>();

      public?CtvMultipleAdapter(Context?context,?List?list,?TextView?tv)?{

      this.mInflater?=?LayoutInflater.from(context);

      this.list?=?list;

      tvTitle?=?tv;

      }

      @Override

      public?int?getCount()?{

      return?list.size();

      }

      @Override

      public?Object?getItem(int?position)?{

      return?null;

      }

      @Override

      public?long?getItemId(int?position)?{

      return?0;

      }

      @Override

      public?View?getView(final?int?position,?View?convertView,?ViewGroup?parent)?{

      final?CtvViewHolder?holder;

      final?String?string?=?list.get(position);

      //觀察convertView隨ListView滾動(dòng)情況

      if?(convertView?==?null)?{

      convertView?=?mInflater.inflate(R.layout.item_ctv_multiple,?null);

      holder?=?new?CtvViewHolder();

      /*得到各個(gè)控件的對(duì)象*/

      holder.ctv_top?=?(CheckedTextView)?convertView.findViewById(R.id.ctv_top);

      convertView.setTag(holder);//綁定ViewHolder對(duì)象

      }?else?{

      holder?=?(CtvViewHolder)?convertView.getTag();//取出ViewHolder對(duì)象

      }

      holder.ctv_top.setText(string);

      //默認(rèn)選中狀態(tài)

      if(holder.ctv_top.isChecked()){

      //list未包含選中string;

      if(!selectList.contains(string)){

      selectList.add(string);

      }

      }

      if?(selectList.size()?==?0)?{

      tvTitle.setText("");

      Android CheckedTextView 使用+實(shí)例

      }?else?{

      tvTitle.setText(selectList.toString());

      }

      holder.ctv_top.setOnClickListener(new?View.OnClickListener()?{

      @Override

      public?void?onClick(View?v)?{

      holder.ctv_top.toggle();//切換選中與非選中狀態(tài)

      //單選

      if(holder.ctv_top.isChecked()){//

      //list未包含選中string;

      if(!selectList.contains(string)){

      selectList.add(string);

      }

      }else{

      //list未包含選中string;

      if(selectList.contains(string)){

      selectList.remove(string);

      }

      }

      if?(selectList.size()?==?0)?{

      tvTitle.setText("");

      }?else?{

      tvTitle.setText(selectList.toString());

      }

      }

      });

      return?convertView;

      }

      /*存放控件*/

      public?class?CtvViewHolder?{

      public?CheckedTextView?ctv_top;

      }

      @Override

      public?boolean?areAllItemsEnabled()?{

      return?false;//Item不可點(diǎn)擊

      }

      @Override

      public?boolean?isEnabled(int?position)?{

      return?false;//Item不可點(diǎn)擊

      //?攔截事件交給上一級(jí)處理

      //return?super.isEnabled(position);

      }

      }

      4.復(fù)選框adapter對(duì)應(yīng)布局

      android:layout_width="match_parent"

      android:orientation="vertical"

      android:layout_height="match_parent">

      android:id="@+id/ctv_top"

      android:checked="true"

      android:checkMark="?android:attr/listChoiceIndicatorMultiple"

      android:checkMarkTint="@color/color_FF773D"

      android:padding="10dp"

      android:textSize="16sp"

      android:layout_marginTop="3dp"

      android:layout_width="match_parent"

      android:layout_height="wrap_content"?/>

      這里用到checkMark(默認(rèn)復(fù)選框樣式)、checkMarkTint(復(fù)選框顏色設(shè)為黃色)、和checked(true默認(rèn)選中)幾個(gè)屬性,可以更好的理解他們。

      5.單選框adapter

      private?String?selectStr="";//全局變量

      holder.ctv_top.setText(string);

      holder.ctv_top.setChecked(selectStr.equals(string));

      holder.ctv_top.setOnClickListener(new?View.OnClickListener()?{

      @Override

      public?void?onClick(View?v)?{

      holder.ctv_top.toggle();//切換選中與非選中狀態(tài)

      //單選

      if(holder.ctv_top.isChecked()){

      selectStr=string;

      }else{

      selectStr="";

      }

      tvTitle.setText(selectStr);

      notifyDataSetChanged();

      }

      });

      大部分與復(fù)選框CtvMultipleAdapter設(shè)置相同,僅部分不同就不做多重復(fù)了。

      6.單選框adapter對(duì)應(yīng)布局

      android:id="@+id/ctv_top"

      android:checkMark="?android:attr/listChoiceIndicatorSingle"

      android:padding="10dp"

      android:textSize="16sp"

      android:layout_marginTop="3dp"

      android:layout_width="match_parent"

      android:layout_height="wrap_content"?/>

      僅使用單選默認(rèn)樣式。

      7.邏輯處理從adapter放在主界面處理

      ListView.setOnItemClickListener(new?AdapterView.OnItemClickListener()?{

      @Override

      public?void?onItemClick(AdapterView?parent,?View?view,?int?position,?long?id)?{

      //在這里進(jìn)行單選復(fù)選的邏輯處理

      }

      });

      使用CheckedTextView配合ListView實(shí)現(xiàn)單選與多選的功能我們實(shí)現(xiàn)了。到這里,關(guān)于CheckedTextView我們也就介紹完了,嘿嘿。

      Android

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:藍(lán)橋ROS機(jī)器人之古月居ROS入門21講
      下一篇:Java 每半年就會(huì)更新一次新特性,再不掌握就要落伍了:Java15 的新特性
      相關(guān)文章
      亚洲成av人影院| 久久99亚洲综合精品首页 | 久久影院亚洲一区| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲日本国产综合高清| 亚洲另类自拍丝袜第1页| 亚洲视频国产视频| 久久精品亚洲精品国产色婷| 久久久久亚洲AV片无码下载蜜桃 | 亚洲色欲www综合网| 亚洲国产一区在线| 久久久久久亚洲精品中文字幕| 亚洲国产成人片在线观看| 好看的亚洲黄色经典| 久久精品国产亚洲香蕉| 久久亚洲国产精品五月天| 亚洲av日韩综合一区在线观看| 亚洲国产精品久久久久网站| 久久精品国产亚洲AV嫖农村妇女| 亚洲情a成黄在线观看动漫尤物| 亚洲人成电影在线天堂| 亚洲精品中文字幕无乱码| 亚洲天堂福利视频| 亚洲精品国产精品国自产网站| 中文字幕在线观看亚洲视频| 亚洲色大成网站www永久男同| 亚洲av无码片vr一区二区三区| jizzjizz亚洲日本少妇| 亚洲精品无码日韩国产不卡?V| 一本色道久久综合亚洲精品高清 | 亚洲av无码久久忘忧草| 亚洲精品无码国产片| 亚洲av日韩av欧v在线天堂| 亚洲精品无码激情AV| 亚洲熟妇av一区二区三区| 亚洲av无码专区在线播放| 亚洲丝袜美腿视频| 亚洲第一成人在线| 久久无码av亚洲精品色午夜 | 亚洲精品国产精品国自产观看| 亚洲中文字幕无码日韩|