FAQ_07_android:clickable 问题

Android Button点击禁用技巧
本文介绍了在Android开发中如何通过调整代码顺序实现Button的点击禁用功能,避免按钮被重复点击,通过调整setClickable方法的位置,有效控制按钮的响应状态。

在android Button的xml文件属性中有这麽一个属性标签:

android:clickable该标签(继承自View的xml属性)的值必须是boolean值,即true、false。该标签目的是设置button是否可以被点击。

于是,我Demo一把,xml文件如下:

<Button android:id="@+id/btn_to" android:clickable="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="to" /> 不好意思,运行之后,该Button一如既往的好使,并没有“不可点击”。搞不明白、、、、

在 android 中几乎每一个xml属性,对应的都有一个方法,于是我改用下面的方法:

setClickable();心里想,这次应该可以了,示意代码:

btn_to.setClickable(false); btn_to.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // to do } });再次运行,还是不行!没办法,看源码吧!

我们知道,点击 button 会触发下面的源码(View.java):

public void setOnClickListener(OnClickListener l) { if (!isClickable()) { setClickable(true); } mOnClickListener = l; }呵呵,你会明白,只要点击button都会将setClickable设置为true,所以在setOnClickListener之前setClickable设置为false只不过是多此一举!

那么,解决办法就出来了,调换一下代码的位置即可:

btn_to.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // to do } }); btn_to.setClickable(false);

这样,你再次点击button试一试,呵呵,它无动于衷了吧!

yes,搞定!


<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/dialog_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="@dimen/dimen_84dp" android:orientation="vertical"> <com.google.android.material.appbar.COUIDividerAppBarLayout android:id="@+id/appbar" style="@style/CommonAppBarStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/color_transparent" android:clickable="true" android:focusable="true" android:paddingLeft="@dimen/dimen_0dp" android:paddingRight="@dimen/dimen_0dp" app:elevation="@dimen/toolbar_elevation"> <com.coui.appcompat.toolbar.COUIToolbar android:id="@+id/toolbar" style="@style/COUIToolBarInAppBarLayoutStyle" android:layout_width="match_parent" android:background="@null" app:supportTitleTextAppearance="@style/textAppearanceSecondTitle" app:titleCenter="false" /> <com.coui.appcompat.tablayout.COUITabLayout android:id="@+id/tab_layout" android:background="@color/color_transparent" style="@style/COUISmallTabLayoutStyle" /> </com.google.android.material.appbar.COUIDividerAppBarLayout> <RelativeLayout android:id="@+id/content_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <com.filemanager.common.view.ViewPagerWrapperForPC android:id="@+id/view_pager_wrapper" android:layout_width="match_parent" android:layout_height="match_parent"> <com.filemanager.common.view.viewpager.RTLViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/appbar" android:clipChildren="false" android:clipToPadding="false" android:orientation="horizontal" /> </com.filemanager.common.view.ViewPagerWrapperForPC> </RelativeLayout> </LinearLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="?attr/couiColorBackgroundElevatedWithCard" android:minHeight="@dimen/operation_btn_background_height"> <View android:id="@+id/button_divider" android:layout_width="match_parent" android:layout_height="@dimen/divider_background_height" android:layout_gravity="top" android:alpha="0" android:background="?attr/couiColorDivider" android:forceDarkAllowed="false" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <LinearLayout android:id="@+id/select_root_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginStart="@dimen/dimen_16dp" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="false" android:orientation="horizontal"> <TextView android:id="@+id/select_title_content" android:layout_width="match_parent" android:layout_height="match_parent" android:lineHeight="22dp" android:text="@string/not_selected_file" android:textAppearance="@style/couiTextHeadlineXS" android:textColor="?attr/couiColorLabelPrimary" android:textSize="16sp" android:visibility="visible" /> <ImageView android:id="@+id/select_arraw_up" android:layout_width="18dp" android:layout_height="18dp" android:src="@drawable/arrow_up" android:layout_marginLeft="@dimen/dimen_6dp" android:visibility="gone" android:layout_gravity="center"/> </LinearLayout> <TextView android:id="@+id/select_body_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:lineHeight="20dp" android:textSize="14sp" android:textAppearance="?attr/couiTextBodyXS" android:textColor="?attr/couiColorLabelSecondary" android:visibility="gone" android:text="@string/selected_size"/> </LinearLayout> <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1"/> <com.coui.appcompat.button.COUIButton android:id="@+id/btn_add_file" style="@style/Widget.COUI.Button.Large" android:layout_width="@dimen/dimen_96dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginEnd="@dimen/dimen_16dp" android:text="@string/label_add_recent_file" /> </LinearLayout> </FrameLayout> </FrameLayout>这是这个页面
07-29
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".fragment.tools.FuelActivity"> <!-- 标题 --> <RelativeLayout android:id="@+id/relative" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="24dp" android:layout_marginTop="@dimen/dp_40" > <TextView android:id="@+id/tv_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:text="" android:drawablePadding="5dp" android:drawableLeft="@mipmap/img_back" android:textColor="@color/black" android:textSize="16sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="油耗计算" android:textSize="20sp" android:textStyle="bold" android:gravity="center" android:textColor="@color/black"/> </RelativeLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/relative" android:orientation="vertical" android:layout_marginRight="@dimen/dp_10" android:layout_marginLeft="@dimen/dp_10" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="汽油油耗 (L)" android:textColor="@color/black" android:textSize="18sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="百公里油耗=(加油量+行驶里程)*100" android:textColor="@color/black" android:textSize="13sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="燃油类型" android:textColor="@color/black" android:textSize="18sp" android:layout_marginTop="30dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="60dp" android:orientation="horizontal" android:layout_marginTop="@dimen/dp_10" android:gravity="center" > <TextView android:id="@+id/tv_92" android:layout_width="0dp" android:layout_weight="1" android:layout_height="@dimen/anythink_45dp" android:layout_marginRight="@dimen/anythink_padding_5dp" android:text="92#" android:gravity="center" android:background="@drawable/outcome_bg" android:textColor="@color/black" android:textSize="15sp" android:clickable="true" /> <TextView android:id="@+id/tv_95" android:layout_width="0dp" android:layout_weight="1" android:layout_height="@dimen/anythink_45dp" android:layout_marginLeft="@dimen/anythink_padding_5dp" android:text="95#" android:gravity="center" android:textColor="@color/black" android:textSize="15sp" android:clickable="true" android:background="@drawable/outcome_bg" /> <TextView android:id="@+id/tv_98" android:layout_width="0dp" android:layout_weight="1" android:layout_height="@dimen/anythink_45dp" android:layout_marginLeft="@dimen/anythink_padding_5dp" android:text="98#" android:gravity="center" android:textColor="@color/black" android:textSize="15sp" android:clickable="true" android:background="@drawable/outcome_bg" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/anythink_E8E8E8" android:layout_marginTop="@dimen/dp_10" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="10dp" > <TextView android:id="@+id/tv_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="燃油单价(升):" android:textSize="15sp" android:textColor="@color/black" /> <EditText android:id="@+id/et_price" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="请输入" android:layout_marginLeft="@dimen/dp_10" android:layout_weight="1" android:background="@android:color/transparent" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="元" android:textColor="@color/black" android:textSize="15sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:id="@+id/tv_prices" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="加油价格:" android:textSize="15sp" android:textColor="@color/black" /> <EditText android:id="@+id/et_prices" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="请输入" android:layout_marginLeft="@dimen/dp_10" android:layout_weight="1" android:background="@android:color/transparent" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="元" android:textColor="@color/black" android:textSize="15sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:id="@+id/tv_mileage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="行驶公里:" android:textSize="15sp" android:textColor="@color/black" /> <EditText android:id="@+id/et_mileage" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="请输入" android:layout_marginLeft="@dimen/dp_10" android:layout_weight="1" android:background="@android:color/transparent" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="公里" android:textColor="@color/black" android:textSize="15sp" /> </LinearLayout> <TextView android:id="@+id/btn_pg" android:layout_width="match_parent" android:layout_height="55dp" android:background="@mipmap/img_but" android:text="一键计算" android:textColor="@color/white" android:gravity="center" android:textSize="15sp" android:layout_marginTop="140dp" android:layout_marginLeft="@dimen/base_dp_20" android:layout_marginRight="@dimen/base_dp_20" /> </LinearLayout> </RelativeLayout>如上布局我选中92号汽油,输入每升燃油单价,加油价格,行驶公里,来计算每百公里的油耗,怎么操作
11-05
使用可滚动的布局(如ScrollView)包裹内容,并确保Button在ScrollView内。<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/close_black" android:clickable="true" android:focusable="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.042" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.068" /> <ImageView android:id="@+id/isp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_isp" android:clickable="true" android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintHorizontal_bias="0.958" app:layout_constraintTop_toTopOf="@id/close" app:layout_constraintVertical_bias="0.081" /> <TextView android:id="@+id/create_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/tpds_all_dp_18" android:text="@string/create_account" android:textSize="@dimen/tpds_all_text_size_22" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.086" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/close" /> <com.tplink.design.text.TPTextViewDrawable android:id="@+id/text" style="@style/Widget.TPDesign.TextView.Secondary.Subtitle1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/email_ver" android:textColor="@color/grey_text" android:layout_marginHorizontal="@dimen/tpds_all_dp_16" android:layout_marginTop="@dimen/tpds_all_dp_10" app:layout_constraintTop_toBottomOf="@id/create_text" /> <com.tplink.design.text.TPTextField android:id="@+id/tf_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/e_mail" android:layout_marginTop="@dimen/tpds_all_dp_30" android:layout_marginStart="@dimen/tpds_all_dp_16" android:layout_marginEnd="@dimen/tpds_all_dp_16" app:layout_constraintTop_toBottomOf="@id/text" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/> <ImageView android:id="@+id/region_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_region" android:layout_marginTop="@dimen/tpds_all_dp_10" android:layout_marginEnd="@dimen/tpds_all_dp_104" app:layout_constraintTop_toBottomOf="@id/tf_content" app:layout_constraintEnd_toEndOf="@id/tf_content" /> <TextView android:id="@+id/region" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/_region" android:textSize="@dimen/tpds_all_text_size_16" android:textColor="@color/tp" android:clickable="true" android:focusable="true" android:layout_marginStart="@dimen/tpds_all_dp_6" app:layout_constraintTop_toTopOf="@id/region_icon" app:layout_constraintStart_toEndOf="@id/region_icon" /> <!-- TODO 按钮无法顶起--> <Button android:id="@+id/btn_contained" style="?attr/materialButtonStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="@dimen/tpds_all_dp_16" android:layout_marginEnd="@dimen/tpds_all_dp_16" android:layout_marginBottom="@dimen/tpds_all_dp_56" android:text="@string/_next" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> <TextView android:id="@+id/text2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/already_have" android:clickable="true" android:focusable="true" android:gravity="center" android:textColor="@color/grey_text" android:textSize="@dimen/tpds_all_text_size_14" android:layout_marginBottom="@dimen/tpds_all_dp_20" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>应该怎么设置呢
09-04
<?xml version="1.0" encoding="utf-8"?> <androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/e" tools:context=".fragment.UserFragment"> <!-- 修正为正确的Fragment类名 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <!-- 顶部用户信息区域 --> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_welcome"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:padding="48dp"> <!-- 用户头像(优化尺寸适配) --> <com.google.android.material.imageview.ShapeableImageView android:id="@+id/iv_avatar" android:layout_width="80dp" android:layout_height="80dp" android:padding="2dp" android:src="@drawable/user_icon" android:scaleType="centerCrop" app:shapeAppearanceOverlay="@style/circleImageStyle" app:strokeColor="#FFFFFF" app:strokeWidth="2dp" /> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="欢迎您,亲爱的花主" android:textColor="@color/white" android:textSize="18sp" android:textStyle="bold" /> </LinearLayout> </FrameLayout> <!-- 功能列表区域 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="16dp" android:background="@drawable/bg_border" android:orientation="vertical" android:paddingStart="16dp" android:paddingEnd="16dp"> <!-- 我的订单 --> <LinearLayout android:id="@+id/myrecord" android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" android:orientation="horizontal" android:clickable="true" android:focusable="true" android:background="?attr/selectableItemBackground"> <!-- 添加点击反馈 --> <ImageView android:layout_width="24dp" android:layout_height="24dp" android:layout_marginEnd="8dp" android:src="@drawable/ic_order" android:scaleType="centerInside" app:tint="@color/text_hint" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="我的订单" android:textColor="@color/text_hint" android:textSize="14sp" android:textStyle="bold" /> <ImageView android:layout_width="16dp" android:layout_height="16dp" android:src="@drawable/arrow_right" android:scaleType="centerInside" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/divider" /> <!-- 移除冗余分割线(原代码中有重复分割线) --> <!-- 个人信息 --> <LinearLayout android:id="@+id/ll_info" android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" android:orientation="horizontal" android:clickable="true" android:focusable="true" android:background="?attr/selectableItemBackground"> <ImageView android:layout_width="24dp" android:layout_height="24dp" android:layout_marginEnd="8dp" android:src="@drawable/user_icon" android:scaleType="centerInside" app:tint="@color/text_hint" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="个人信息" android:textColor="@color/text_hint" android:textSize="14sp" android:textStyle="bold" /> <ImageView android:layout_width="16dp" android:layout_height="16dp" android:src="@drawable/arrow_right" android:scaleType="centerInside" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/divider" /> <!-- 联系客服 --> <LinearLayout android:id="@+id/ll_contact" android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" android:orientation="horizontal" android:clickable="true" android:focusable="true" android:background="?attr/selectableItemBackground"> <ImageView android:layout_width="24dp" android:layout_height="24dp" android:layout_marginEnd="8dp" android:src="@drawable/ic_contact" android:scaleType="centerInside" app:tint="@color/text_hint" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="联系客服" android:textColor="@color/text_hint" android:textSize="14sp" android:textStyle="bold" /> <ImageView android:layout_width="16dp" android:layout_height="16dp" android:src="@drawable/arrow_right" android:scaleType="centerInside" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/divider" /> <!-- 关于商店 --> <LinearLayout android:id="@+id/ll_about" android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" android:orientation="horizontal" android:clickable="true" android:focusable="true" android:background="?attr/selectableItemBackground"> <ImageView android:layout_width="24dp" android:layout_height="24dp" android:layout_marginEnd="8dp" android:src="@drawable/ic_about" android:scaleType="centerInside" app:tint="@color/text_hint" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="关于商店" android:textColor="@color/text_hint" android:textSize="14sp" android:textStyle="bold" /> <ImageView android:layout_width="16dp" android:layout_height="16dp" android:src="@drawable/arrow_right" android:scaleType="centerInside" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/divider" /> <!-- 退出登录 --> <LinearLayout android:id="@+id/ll_logout" android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" android:orientation="horizontal" android:clickable="true" android:focusable="true" android:background="?attr/selectableItemBackground"> <ImageView android:layout_width="24dp" android:layout_height="24dp" android:layout_marginEnd="8dp" android:src="@drawable/ic_logout" android:scaleType="centerInside" app:tint="@color/text_hint" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="退出登录" android:textColor="@color/text_hint" android:textSize="14sp" android:textStyle="bold" /> <ImageView android:layout_width="16dp" android:layout_height="16dp" android:src="@drawable/arrow_right" android:scaleType="centerInside" /> </LinearLayout> </LinearLayout> </LinearLayout> </androidx.core.widget.NestedScrollView>这是我fragment_me.xml里的代码,根据你的提示,把它补充完整,我需要完整的代码
10-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值