自定义radiobutton,progressbar,edittext软键盘
在现实的开发中很多时候,安卓自带的组件的性能可能不能满足我们的需要,所以需要自定义一些东西
把最新用到的3个最定义的小控件,做个记录
自定义的radiobutton
首先看一下效果
代码很简单
如下
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自定义的radiogroup" />
<RadioGroup
android:id="@+id/radiogroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<RadioButton
android:id="@+id/man_radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:background="@drawable/usercenter_complete_setbasicinfo_radio"
android:button="@null" />
<TextView
android:id="@+id/radio_text_man"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男"
android:textColor="#FF999999" />
<RadioButton
android:id="@+id/women_radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="5dp"
android:background="@drawable/usercenter_complete_setbasicinfo_radio"
android:button="@null"
android:checked="true" />
<TextView
android:id="@+id/radio_text_feman"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女"
android:textColor="#FF000000" />
</RadioGroup>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="30dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="正常的radiogroup" />
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="女" />
</RadioGroup>
</LinearLayout>
</LinearLayout>
首先我们将button设置为 null ,然后给他添加自定义的android:background
usercenter_complete_setbasicinfo_radio的代码如下
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="false"
android:drawable="@mipmap/radio_nomal" />
<item
android:state_checked="true"
android:drawable="@mipmap/radiobutton_select" />
</selector>
这里我放了俩张图片一张是选中的状态的,一张是没有选中的状态的,这样点击的时候就会进行图片的切换了,字体跟随变化我加了一个简单的监听
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == manRadio.getId()) {
mRadioTextMan.setTextColor(Color.parseColor("#FF000000"));
mRadioTextFeman.setTextColor(Color.parseColor("#FF999999"));
} else if (checkedId == womenRadio.getId()) {
mRadioTextFeman.setTextColor(Color.parseColor("#FF000000"));
mRadioTextMan.setTextColor(Color.parseColor("#FF999999"));
}
}
});
这样动态的改变字体的颜色,这样一个简单的自定义的radiobutton就做好了
自定义的progressbar
还是先上效果图
我这里放的是一张静态的
这里是静态的图片,自定义的第一个黄色是第一进度,深蓝色的是第二进度,最后的红色的是整个progressbar的背景色,
看下代码,很简单
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自定义的progressbar" />
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="7dp"
android:max="200"
android:progress="50"
android:progressDrawable="@drawable/regiester_progressbar"
android:secondaryProgress="100" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="30dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="正常的progress" />
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="7dp"
android:max="100"
android:progress="50" />
</LinearLayout>
</LinearLayout>
重点是android:progressDrawable这句,采用了自定义样式,看下这里面写的是什么
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@android:id/background">
<shape>
<corners android:radius="5dip" />
<gradient
android:angle="0"
android:centerColor="@color/colorAccent"
android:centerY="0.75"
android:endColor="@color/colorAccent"
android:startColor="@color/colorAccent" />
</shape>
</item>
<!--第二个进度条的颜色-->
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:angle="0"
android:centerColor="@color/blue"
android:centerY="0.75"
android:endColor="@color/blue"
android:startColor="@color/blue" />
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:angle="0"
android:endColor="@color/yellow_fddc5b"
android:startColor="@color/yellow_fddc5b" />
</shape>
</clip>
</item>
</layer-list>
分为了3个item,第一个是背景,第二个是第二进度条,第三个是第一进度条
gradient指的是渐变色,简单的解释这一个,里面的属性大家可以看下这篇博客,讲的很详细
http://blog.csdn.net/brokge/article/details/9713041,这样自定义的progressbar就完成了
自定义的软键盘的样式
首先还是看一下效果图
第一个是正常的,注意看右下角的按钮样式
这一个是下一步的,注意看右下角的按钮样式
这一个是发送的,注意看右下角的按钮样式
代码如下,很简单
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自定义的软件盘右下角按键是下一步的" />
<EditText
android:id="@+id/uc_complete_fragment_edittext"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@null"
android:cursorVisible="true"
android:gravity="center|right"
android:hint="自定义的光标在右边出现的"
android:imeOptions="actionNext"
android:inputType="text"
android:singleLine="true"
android:textColorHint="@color/color_d7d7d7"
android:textCursorDrawable="@null"
android:textSize="15sp" />
</LinearLayout>
这是下一步按钮的样式,主要注意的是在edittext中的android:imeOptions=”actionNext”
android:inputType=”text”这俩句代码,actionnext就是表示样式名字为下一步,android:imeOptions有很多可以选择的,有兴趣的可以百度找找,同时我们在设置好样式之后,最终目的还是要对这个按钮进行操作,这里还是举例下一步,其他的都是大同小异
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
switch (actionId) {
case EditorInfo.IME_ACTION_NEXT:
onClickNext();
break;
}
return false;
}
继承这个监听TextView.OnEditorActionListener,实现它的方法,同时edittext实现这个监听
editText.setOnEditorActionListener(this);
每个android:imeOptions中的actionNext都有对应的一个actionid,我们在监听里面可以对其进行操作,进行下一步的操作
到这里就全部讲完了,github地址是这个https://github.com/swtandyz/MyStudyAppShop