安卓设置按钮选中状态

1.创建正常状态的drawable文件(以删除按钮为例)

创建正常状态的xml文件,起名为delete_btn_normal

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="20dp"/>
    <stroke android:color="@color/colordarkGray" android:width="0.4dp"/>
    <solid android:color="@color/colorGrayBack"/>
</shape>

设置圆角为20dp,colordarkGray和colorGrayBack为自定义的颜色可以随意设置。

corners 表示圆角
stroke  表示边框,设置颜色和边框宽度
solid   表示背景颜色

创建按下状态的xml文件,起名为delete_btn_pressed

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="25dp"/>
    <stroke android:color="@color/colordarkGray" android:width="0.4dp"/>
    <solid android:color="@color/colordarkGray"/>
</shape>

再创建按钮的资源文件起名为delete_alarm_btn_drawable

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/delete_btn_nomal" android:state_pressed="false" />
    <item android:drawable="@drawable/delete_btn_pressed" android:state_pressed="true"/>
</selector>

设置两种状态下的drawable

接着设置按钮的background属性为delete_alarm_btn_drawable即可

 <Button
            android:id="@+id/delete_btn"
            android:layout_width="match_parent"
            android:layout_marginRight="25dp"
            android:layout_marginLeft="25dp"
            android:layout_height="40dp"
            android:background="@drawable/delete_alarm_btn_drawable"
            android:textColor="@color/colorRed"
            android:textSize="16sp"
            android:gravity="center"
            android:text="删除闹铃"
            android:layout_marginTop="30dp"
            android:layout_marginBottom="40dp"
            style="?android:attr/borderlessButtonStyle"/>

效果图

### 如何在 Listview 中设置按钮选中状态颜色 为了实现 `ListView` 的按钮选中状态下更改背景色或文字颜色的功能,可以采用多种方式完成这一需求。以下是几种常见的解决方案: #### 方法一:通过 Selector 文件配置 可以通过 XML 定义一个 `selector` 文件来控制按钮状态变化行为。创建一个名为 `button_selector.xml` 的文件并放置于项目的 `res/drawable/` 目录下。 ```xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 按钮被按下的状态 --> <item android:state_pressed="true" android:color="#FF0000"/> <!-- 背景色为红色 --> <!-- 默认状态 --> <item android:color="#0000FF"/> <!-- 背景色为蓝色 --> </selector> ``` 接着,在布局文件中应用该 `selector` 到按钮的属性上: ```xml <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@drawable/button_selector" android:background="@drawable/button_selector"/> ``` 此方法适用于简单的 UI 需求场景[^1]。 #### 方法二:动态调整 Adapter 内部逻辑 另一种更灵活的方式是在自定义的 `Adapter` 类中的 `getView()` 方法内处理按钮的颜色变化逻辑。例如: ```java @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(context); convertView = inflater.inflate(R.layout.list_item_layout, parent, false); Button button = convertView.findViewById(R.id.button); // 初始化按钮样式 button.setTextColor(ContextCompat.getColor(context, R.color.default_text_color)); button.setBackgroundResource(R.drawable.default_button_background); } final int pos = position; Button button = convertView.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 更改按钮的文字颜色和背景色 button.setTextColor(ContextCompat.getColor(context, R.color.selected_text_color)); button.setBackgroundResource(R.drawable.selected_button_background); // 如果需要恢复其他未选中项,则遍历整个列表重新设置它们的状态 notifyDataSetChanged(); } }); return convertView; } ``` 这种方式允许开发者完全掌控每一个视图组件的行为,并能轻松扩展更多功能[^4]。 #### 方法三:利用 C# WinForms 实现类似效果 对于基于 .NET 平台开发的应用程序而言,也可以借助事件处理器机制达成相同目的。比如当某个项目被点击之后便记录其索引位置以便后续操作时参照使用: ```csharp private int selectedRowIndex = -1; private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { if(e.IsSelected){ this.selectedRowIndex=e.ItemIndex; e.Item.BackColor= Color.LightGray;// 设置新选定行背景色 }else{ if(this.selectedRowIndex==e.Item.Index){ e.Item.BackColor= SystemColors.Window ;// 取消高亮显示 this.selectedRowIndex=-1 ; } } } protected override void OnControlAdded(ControlEventArgs e) { base.OnControlAdded(e); foreach(var item in listView1.Items.Cast<ListViewItem>()) { if(item.Index !=this.selectedRowIndex ) item.BackColor=SystemColors.Control; } } ``` 上述代码片段展示了如何维护当前已选择条目以及更新界面展示的效果[^2]. --- ### 总结 以上介绍了三种不同的技术路线用于解决同一类问题——即如何让列表内的按钮具备视觉反馈特性(如改变背景色或者字体颜色)。具体选用哪种方案取决于实际应用场景和个人偏好等因素考虑决定。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值