Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Day22-CheckBox

Day22-CheckBox

編輯:關於Android編程

CheckBox (多選)

extends Button

checkBox中選擇器

state_checked : 已經被選中了
state_checkable: 可以被選中

給checkBox設置選擇器: (get新技能!!)

在設置之前我們先將選擇器列上

1, 給android:button=”@drawable/cb_sel設置背景選擇器

選擇器

cb_bg.xml



    
    
    

cb_bg_1.xml



    
    
    
    

cb_sel.xml



    
    

activity_main.xml

    

效果
這裡寫圖片描述

選擇事件

我們通過一個模擬點贊的例子, 來說明點擊事件

首先來個顏色選擇器



    
    
    

activity_main.xml

注意, 需要將button置為空
並且將圖片放在控件頂部

    
   

給它著色, 可以使用 android:drawableTint=”@color/cb_color_sel”在xml中設置, 但是它是API23以後才可以使用 目前(2016-8-26)幾乎不能用, 所以我們要找一個兼容的辦法, 看MainActivity.java

MainActivity.java

CheckBox checkBox = (CheckBox) findViewById(R.id.main_cb);
//checkBox.setCompoundDrawableTintList();//API23之後可用
//獲取到四周的drawable, 分為左上中下
Drawable[] drawables = checkBox.getCompoundDrawables();
//拿到頂部  順序: 左上右下
Drawable top = drawables[1];
//top.setTint();最低版本21, 使用兼容包, 來兼容低版本手機
// 參數: 1, 給誰著色  2,獲取顏色列表
ColorStateList list = getResources().getColorStateList(R.color.cb_color_sel);
DrawableCompat.setTintList(top,
        list);
DrawableCompat.setTintMode(top, PorterDuff.Mode.SRC_ATOP);
//設置監聽
checkBox.setOnCheckedChangeListener(this);
checkBox.setText("+" + count);

事件監聽方法

//點擊事件方法
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    buttonView.setText("+" + (count + (isChecked ? 1 : 0)));
}

效果圖:
這裡寫圖片描述

注意:

1, 一般情況下, 後面帶有 ~Compat的, 為支持包;

2, checkBox.getCompoundDrawables();返回的是該控件在四周的drawable, 一個四個, 0 - 3 (包含) , 順序是, 左上右下

Radio(單選)

我們用單選按鈕來實現類似於微信底部的導航條

布局文件

    
    

        

        

        
        
    

style文件

上述注釋代碼, API23才可以使用

Activity代碼

//單選按鈕 著色
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.main_group);
for (int i = 0; i < radioGroup.getChildCount(); i++) {
    RadioButton button = (RadioButton) radioGroup.getChildAt(i);
    Drawable drawable = button.getCompoundDrawables()[1];
    DrawableCompat.setTintList(drawable, list);
    DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_ATOP);
}

效果圖
這裡寫圖片描述

動態實現, 圖片輪播下面的小點的實現

背景選擇器
nav_bg.xml



    
    

nav_bg_1.xml



    
    

nav_sel.xml



    
    

main.xml 布局文件

    
    

    

Activity代碼

LayoutInflater inflater = LayoutInflater.from(this);
 navigation = (RadioGroup) findViewById(R.id.main_navigation);
 for (int i = 0; i < 10; i++) {
     //                     第二個參數不要指定為空, 第三個,加不加載上, 如果寫true就返回父控件, 否則返回
     View radioButton = inflater.inflate(R.layout.radio_child, navigation, false);
     radioButton.setId(i);
     navigation.addView(radioButton);
 }
 navigation.check(0);

事件監聽方法

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

        //點擊上方圖片實現

//        實現輪播
        int i = navigation.getCheckedRadioButtonId();
        i++;
        if (i >= navigation.getChildCount()) {
            i = 0;
        }
        navigation.check(i);
    }

這裡寫圖片描述

Spinner(下拉列表)

簡單說一下適配器視圖: AdapterView extens ViewGroup
它是負責將數據源未來該怎樣顯示在屏幕上

最簡單的顯示方式, 使用資源文件

strings.xml


    Test 01
    Test 02
    Test 03
    Test 04
    Test 05

main.xml

    

    

效果圖
這裡寫圖片描述

該種方式, 局限太大, 使用頻率較小

View絕對不能直接操作數據源, 數據源永遠是通過控制器來操作

下拉列表聯動 對Spinner有個深入的了解

布局文件




    

    
    







    

        

        

        

        
        

        
    


Activity代碼

/**
 * 下拉列表
 */
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    private ArrayAdapter adapter;
    private ArrayAdapter adapter_1;
    private ArrayAdapter adapter_2;
    private static final String[]  PROVINCES = {"北京", "河北", "山東"};
    private static final String[][]  CITIES = {{"北京"}, {"石家莊", "邯鄲", "衡水", "張家口"}, {"濟南", "泰安", "青島", "日照"}};
    private static final String[][][]  AREAS = { { {"海澱", "昌平", "朝陽", "東城", "西城"}  }, {{"A", "B"}, {"C", "D"}, {} , {}  }, { {}, {}, {}, {} }   };
    private Spinner spinner;
    private Spinner spinner_1;
    private Spinner spinner_2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

         spinner = (Spinner) findViewById(R.id.main_spinner);
         spinner_1 = (Spinner) findViewById(R.id.main_spinner_1);
         spinner_2 = (Spinner) findViewById(R.id.main_spinner_2);


        // 上下文對象(主要用來創建View, 只要你想創建任何View, 都需要上下文對象)   視圖                            數據源
        adapter = new ArrayAdapter<>(this,R.layout.spinner_child,R.id.item_text, new ArrayList(Arrays.asList(PROVINCES)));
        adapter_1 = new ArrayAdapter<>(this,R.layout.spinner_child,R.id.item_text,  new ArrayList(Arrays.asList(CITIES[0])));
        adapter_2 = new ArrayAdapter<>(this,R.layout.spinner_child,R.id.item_text,  new ArrayList(Arrays.asList(AREAS[0][0])));
        spinner.setAdapter(adapter);
        spinner_1.setAdapter(adapter_1);
        spinner_2.setAdapter(adapter_2);
//        findViewById(R.id.main_add).setOnClickListener(this);

        //不讓開發者調用, 直接拋出異常
//        spinner.setOnItemClickListener();
        spinner.setOnItemSelectedListener(this);
        spinner_1.setOnItemSelectedListener(this);
        spinner_2.setOnItemSelectedListener(this);

    }

    /*****************************/
    //選中時調用
    @Override                         //對應的spinner   哪個View被選中了  位置   ArrayAdapter中position和id相同(以後自己寫得Adapter必須用自己的id)
    public void onItemSelected(AdapterView parent, View view, int position, long id) {
        switch (parent.getId()) {
            case R.id.main_spinner:
                adapter_1.clear();
                adapter_1.addAll(CITIES[position]);
                adapter_2.clear();
                adapter_2.addAll(AREAS[spinner.getSelectedItemPosition()][position]);
                break;
            case R.id.main_spinner_1:
                adapter_2.clear();
                adapter_2.addAll(AREAS[spinner.getSelectedItemPosition()][position]);
                if (adapter_2.isEmpty()) {
                    spinner_2.setVisibility(View.INVISIBLE);
                } else {
                    spinner_2.setVisibility(View.VISIBLE);
                }

                break;
            case R.id.main_spinner_2:
                StringBuilder builder = new StringBuilder();
                builder.append(spinner.getSelectedItem()).append(":")
                        .append(spinner_1.getSelectedItem()).append(":")
                        .append(spinner_2.getSelectedItem());
                Toast.makeText(MainActivity.this, builder.toString(), Toast.LENGTH_SHORT).show();

                break;
        }
    }
    //未選中調用
    @Override
    public void onNothingSelected(AdapterView parent) {

    }
}

效果圖:

這裡寫圖片描述

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved