当我们需要为应用程序的用户提供打开/关闭给定功能的功能时,我们会自动想到复选框,切换按钮或开关:
这些小部件可以直接使用,但是我们局限于特定的外观,这可能是我们在应用程序中想要的,也可能不是我们想要的。 我们可以自定义开关,但是如果要寻找完全不同的东西,还有其他方法可以为用户提供有关是否启用给定功能的视觉反馈,例如纯文本和几个图标:
我们可以通过直接触摸文本字段来从一种状态切换到另一种状态,而不是使用按钮,开关或复选框,而在所有Android版本上都具有一致的外观。 但是如何?
1.选择开/关图标
如果我们还没有图标,那么使用Android Asset Studio的图标生成器来创建图标是快速且容易的。
2.选择开/关颜色
在我们的Android项目的res / values / colors.xml文件中:
#FFFFFF #FFFFE0
3.创建布局
它只是一个可单击的TextView及其关联的Drawable:
在这里,onClick事件处理程序toggleWifi在XML中声明,并将在相应的Activity中实现。
4.编辑关联的活动
//inside Activity
//...
// field
private TextView tvWifi;
// flag saved in prefs or db
private boolean checkWifi;
// colors
private static final int COLOR_OFF = R.color.white;
private static final int COLOR_ON = R.color.lightyellow;
// icons
private static final int IC_WIFI_OFF = R.drawable.ic_wifi_off;
private static final int IC_WIFI_ON = R.drawable.ic_wifi_on;
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
tvWifi = (TextView) findViewById(R.id.wifi_onoff);
// get saved wifi status from db
checkWifi = ...
setWifi(checkWifi);
}
//...
/** onclick handler */
public void toggleWifi(View view) {
//toggle
setWifi( ! checkWifi);
}
/** Sets Wi-fi status + visual feedback */
private void setWifi(boolean onoff){
tvWifi.setCompoundDrawablesWithIntrinsicBounds(
onoff ?
IC_WIFI_ON :
IC_WIFI_OFF,
0, 0, 0 );
tvWifi.setTextColor( onoff ?
getResources().getColor(COLOR_ON) :
getResources().getColor(COLOR_OFF));
// process.. enable or not
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(onoff);
}
//...
@Override
protected void onPause() {
super.onPause();
// save checkWifi flag in db
//...
}
//...
我们可以根据需要在多个字段中执行类似的操作:
注意,我们在XML布局中定义onClick()时使用了View.onClickListener 。 我们本来可以使用View.OnTouchListener :
// Activity now implements View.OnTouchListener
@Override
public void onCreate(Bundle savedInstanceState) {
//...
tvWifi.setOnTouchListener(this);
}
//...
@Override
public boolean onTouch(View v, MotionEvent event) {
// handle event here ...
return true;
}
onClick和onTouch有什么区别 ? 没有太多在这个特殊的使用情况下,由于我们并不需要额外的花哨的东西,我们可以用onTouch和MotionEvent就做。
此技术只是开/关切换的另一种方法。 我们还可以通过某种动画轻松地对其进行增强。 是否比常规开关“更好”,主要是口味问题。 它是一种“非标准”(无论意味着什么),但是,另一方面,它可以为设计人员提供更多的自由和能力来创建自己的原始UI。 编码愉快!
翻译自: https://www.javacodegeeks.com/2014/11/android-tips-onoff-toggle.html