我正在尝试创建一个具有两种状态的视图 - 它具有“就绪”状态和“已按下”状态。
目前实施的方式似乎效率低下。按钮的两种状态都按如下方式编码到布局中:
<!-- 'ready' state button -->
<RelativeLayout
android:id="@+id/strut_button_1"
style="@style/StrutButton" >
<TextView
android:id="@+id/strut_1_badge"
style="@style/Strut1Badge"
android:text="1" />
<TextView
android:id="@+id/strut_1_value"
style="@style/StrutValue"
android:text="@string/placeholder_text_short" />
</RelativeLayout>
<!-- 'pressed' state button -->
<RelativeLayout
android:id="@+id/strut_button_1_complete"
style="@style/StrutButtonComplete"
android:visibility="gone" >
<TextView
android:id="@+id/strut_1_badge"
style="@style/Strut1Badge"
android:text="1" />
<TextView
android:id="@+id/strut_1_value"
style="@style/StrutValueComplete"
android:text="@string/placeholder_text_short" />
<TextView
style="@style/CheckMark"
android:text="\u2714"
android:layout_gravity="center_vertical|right" />
</RelativeLayout>
我设置了一些处理程序来切换按钮的可见性。当按下“就绪”状态按钮时,它将其可见性变为GONE,并将“按下”状态按钮的可见性变为SHOW。
我考虑过使用按钮选择器,但选择器似乎无法呈现我需要的按钮布局。有没有比我现在更好的方法呢?
答案 0 :(得分:0)
尝试使用设置状态的XML drawable:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/color_radio_selected" android:state_focused="true"/>
<item android:drawable="@drawable/color_radio_selected" android:state_pressed="true"/>
<item android:drawable="@drawable/color_radio_selected" android:state_selected="true"/>
<item android:drawable="@drawable/color_radio_selected" android:state_checked="true"/>
<item android:drawable="@drawable/color_radio_unselected"/>
</selector>
以上设置为任何按下/聚焦状态选择单选按钮的状态
然后,您可以将此按钮指定为按钮的背景,如下所示:
<RadioButton
android:id="@+id/btn_network"
style="?android:attr/borderlessButtonStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/menu_background"
android:button="@android:color/transparent"
android:drawableTop="@drawable/color_radio_button <!-- HERE --!>
android:gravity="center"
android:paddingBottom="8dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="14dp"
android:text="@string/network"
android:textColor="@drawable/menu_button_text_white"
android:textSize="14sp" />
答案 1 :(得分:0)
首先,尝试使用Button设置按钮而不是TextViews。它们更容易使用,因为您实际上是在制作按钮。您可以通过背景图像自定义它的外观。
您可以在Java代码中设置不同的状态。您可以先在活动中实现View.OnTouchListener并设置一个OnTouchListener,如下所示:
button.setOnTouchListener(this);
然后在OnTouchListener中,
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_DOWN){
switch (v.getId()){
case (R.id.yourbuttonid):
//This code changes the background of the Button
v.setBackgroundResource(R.drawable.pressed_state)
break;
}
}else if (event.getAction()==MotionEvent.ACTION_UP) {
switch(v.getId()){
case (R.id.yourbuttonid):
//This code changes the background of the Button
v.setBackgroundResource(R.drawable.ready_state)
break;
}
}
}
在上面的代码中,我们设置按下按钮时会发生什么(ACTION_DOWN)以及按下按钮后它会发生什么(ACTION_UP)。在按下按钮之前,按钮将按照xml中的编码。
此代码甚至可以用于不同的按钮。只需在休息后添加另一个案例;在开关里。
希望这有帮助!!