怎麼感受最近補充的都是監聽器的內容,今天學長提了一個新的監聽器,看起來很牛批(由於很長)html
// 添加文本更改的監聽器, TextWatcher是監聽器的回調接口
text.addTextChangedListener(new TextWatcher() {
/**
* 更改文字以前
* @param s 編輯框被更改以前的內容
*/
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// System.out.println("1:" + s);
}android
/**
* 文字更改後
* @param s 更改後的文字
*/
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
try {
Integer integer = Integer.parseInt(s.toString());
if (integer < 1) {
text.setText("1");
}
if (integer > 999) {
text.setText("999");
}
} catch (NumberFormatException e) {
text.setText("1");
}
}ide
@Override
public void afterTextChanged(Editable s) {
System.out.println("3:" + s);
}
});
}佈局
其實剛開始他一輩子成我看蒙了,一眨眼就這麼多。this
其實生成onTextChanged這個監聽器分紅三部分,操做前,操做中,操做後。spa
這個例題的意思就是建立了一個輸入數字的框,用監聽器在第二步,注意是第二步檢測它輸入的東西,若是是1-999內的就原樣輸出,否則就text.setText("1");或者text.setText("999");就是把它輸入的直接改爲這麼多。3d
就這樣的佈局:orm
模擬器實現:反正就是輸入的不在這個範圍內,你一小於或者超過就給你歸1或999htm
running:(onTextChanged監聽器實現的效果,三部分1,2,3,能夠看出,第一步仍是我輸入的1111,第二步由於有約束才變的999,第三步,都懂哈,根據前面的來的)blog
好,複選框來了:
其實和html 的表單裏的複選框思想大同小異。
由於是複選框,直接在佈局裏拖;
兩個按鈕,待會介紹,先介紹複選框的一些屬性
textColor,複選框後面的文字的顏色,
buttonTint是複選框那個框的顏色
checked這個屬性,學過HTML都知道,就是默認會勾選哪一個,屬性值就是布爾值。
狀態按鈕的做用是:提示當前的複選框是什麼狀態,選了仍是沒選,用Toast提示。
綁定按鈕:就至關於一個燈泡和一個開關綁起來,按按鈕,調節複選框。
爲啥會實現這樣的功能,活動代碼揭曉:
final CheckBox c0=findViewById(R.id.c0);
findViewById(R.id.get).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Boolean check=c0.isChecked();
if(check)
Toast.makeText(Main3Activity.this, "選了", Toast.LENGTH_SHORT).show();
else
Toast.makeText(Main3Activity.this, "取消", Toast.LENGTH_SHORT).show();
}
});
findViewById(R.id.b).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Boolean check=c0.isChecked();
// if(check==true){
// c0.setChecked(false);
// }
// else c0.setChecked(true);
c0.setChecked(!c0.isChecked());
}
});
c0.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
CheckBox c2=(CheckBox)buttonView;
String s=c2.getText().toString();
Log.d("Main3Activity",s);
c2.setText(s);
}
});
setOnCheckedChangeListener也是個監聽器,我感受吧,這個監聽器是跟按鈕的綁定有關的,通常是獲取按鈕當前的信息;
解析下代碼,剛開始就直接拿那個狀態按鈕作了個監聽器c0.isChecked()就是判斷是否選中
第二個監聽器是那個綁定按鈕,一樣是先判斷選中沒,沒選擇就setchecked一下,就給它選擇了,爲了綁定起來,咱們得給它同步。
下面那句話就是前面註釋的精簡版,意思就是若是沒選中點一下就選,若是選中了點一下就不選。
監聽器的做用就是獲得按鈕的值,給它放到複選框裏去,就把它的名字取出來了
而後就是單選框:
有個小技巧:
想運行哪一個就給intent-filter標籤剪下來放到那個活動裏,它就會像主活動同樣佔用模擬器。
就上一段代碼吧:
<RadioGroup
android:id="@+id/r0"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:checkedButton="@id/r">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="性別:">
</TextView>
<RadioButton
android:id="@+id/r"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="男" />
<RadioButton
android:id="@+id/r1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女" />
<RadioButton
android:id="@+id/r2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="隱藏" />
</RadioGroup>
上頭的這是佈局:(單選框和複選框的屬性大同小異,就是注意下,單選框須要單選框組去包着
android:checkedButton="@id/r"這句話其實就至關於checked,可是是直接在單選框組選,這樣就直接選id就好,其實都同樣。
)
單選框,由於有不少組不一樣類別的單選框,可能會相互影響因此出現了
RadioButton,
RadioGroup(單選框組,給單選框按鈕分堆的)
活動代碼貼上:
final RadioGroup r0=findViewById(R.id.r0);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int but=r0.getCheckedRadioButtonId();
switch (but){
case R.id.r:
Toast.makeText(Main4Activity.this, "男", Toast.LENGTH_SHORT).show();break;
case R.id.r1:
Toast.makeText(Main4Activity.this, "女", Toast.LENGTH_SHORT).show();break;
case R.id.r2:
Toast.makeText(Main4Activity.this, "隱藏", Toast.LENGTH_SHORT).show();break;
}
}
});
這就是個簡單的監聽器,button是我創的一個按鈕,在這邊是它用的監聽器,爲的就是監聽下單選框的狀況,而後提示。
當時學長是用粗暴的方法,直接每一個單選框去監聽,這邊就是用一個單選框組去記錄,而後用switch去選,不知道大家會不會奇怪
int but=r0.getCheckedRadioButtonId();
case R.id.r:
整型,爲啥case的時候要用按鈕的名字呢?
答案就是:按鈕的名字自帶的就有一種是數字型的。
結束啦,今天的內容。本牛崽忙碌的一天結束啦,看看時間好像沒得時間揮霍了,洗洗睡吧。