之前学习中用的都是标准件,别人做好的东西,有时候也要用一些非标的东西,比如某些按钮很好看,他可能本身是图片实现的,但是手机分辨率那么多,如何解决这个问题,第一个方法是针对不同分辨率做图,设置多个drawable的资源,这样是最完美的,第二是使用.9图片,这可能是安卓自己专门设计的.
我有一个原始的按钮文件.

直接图片右键可以创建.9文件.

得到.9文件,就要开始加工.

调整黑线,只有黑线部分会被拉伸,黑线外会被排除,这样就不至于边缘放大模糊了,右边可以预览实际效果.原始文件不要在放在drawable里,不然就提示重复资源了.

实际替换(设置按钮的background属性)到软件里看看,安卓默认主题会覆盖颜色,所以用了按键的父类才能正确显示颜色.

AppCompatButton是Button的增强兼容版本,所以它支持所有Button的方法.
另外每个控件都有很多状态,可以分别对应不同的图片,需要把不同状态的设置到drawable文件,然后直接引用drawable文件.
比如我做了一个btn_states的drawable文件,只需要按钮引用到这个文件,就可以获得不同时刻的状态.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 1. 按下状态(手指触摸按钮时) -->
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#FF4081" /> <!-- 粉色 -->
<corners android:radius="8dp" />
<stroke android:width="1dp" android:color="#E91E63" />
</shape>
</item>
<!-- 2. 禁用状态(按钮不可点击时) -->
<item android:state_enabled="false">
<shape android:shape="rectangle">
<solid android:color="#CCCCCC" /> <!-- 灰色 -->
<corners android:radius="8dp" />
<stroke android:width="1dp" android:color="#999999" />
</shape>
</item>
<!-- 3. 获得焦点状态(如通过键盘导航选中) -->
<item android:state_focused="true">
<shape android:shape="rectangle">
<solid android:color="#4CAF50" /> <!-- 绿色 -->
<corners android:radius="8dp" />
<stroke android:width="2dp" android:color="#388E3C" />
</shape>
</item>
<!-- 4. 默认状态(无任何交互时) -->
<item>
<shape android:shape="rectangle">
<solid android:color="#3F51B5" /> <!-- 蓝色 -->
<corners android:radius="8dp" />
<stroke android:width="1dp" android:color="#303F9F" />
</shape>
</item>
</selector>
效果就是这样的.

就靠着这些替换,可以做出很多效果,比如仿IOS开关,按钮下面还有很多东西,比如多选框,单选按钮等.之前的按钮中是setOnClick,但是我们看到setOn开头还有很多方法,比如EditText失去焦点后可以通过onFocusChange来判断用户输入是不是正确,或者在内容改变后(onTextChanged),判断内容正确(比如手机号码位数足够),则调用INPUT_METHOD_SERVICE隐藏软键盘.
一些简单的操作也没必要全新开一个Activity,可以用系统的对话框服务,或者一些现成的工具,比如DatePickerDialog,TimerPickerDialog.
今天说的内容比较少,但是基本上也是对控件的一个补充,主要是这部分涉及文档太多了,那么多控件可以选,眼花缭乱的,特别是对于我这种审美几乎没能力的人来说,就更加厉害了.所以虽然内容不多,但是却花了很长时间去看.