android - 如何使禁用 EditText 和 Button 的布局可点击
问题描述
我有带有 EditText 和按钮的简单布局。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:clickable="true"
android:focusable="true">
<EditText
android:id="@+id/editText"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:focusable="false"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"/>
</LinearLayout>
我不希望 EdiText 可编辑并且想要处理点击完整布局
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.linearLayout).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "click", Toast.LENGTH_SHORT).show();
}
});
}
}
但它不起作用我的意思是当我点击时没有 Toast 消息。
解决方案
正如@Liem Vo 在评论中所说:您应该添加android:clickable="false"
到按钮,并确保不要在 java 中添加点击侦听器。因为事件是由子视图处理的。
对于“EditText”,您可以手动调用父母点击监听器:
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View parent = (View) v.getParent();
parent.performClick();
}
});
推荐阅读
- c - 使用 emscripten 编译 SDL/SDL2 会导致重新定义错误
- javascript - 在一个函数中调用多个 Directmethod
- php - 如何在 Laravel 中加入表格?
- php - Retrieving JSON Input Values in laravel not working
- css - Materialise css - side-nav - dropdown - iOS Safari上的错误链接
- javascript - 放在 if 语句中时中间件不起作用
- google-maps - Google Places API 关闭 locationbias
- python - 如何解决在亚马逊 EC2 中运行 MPI 的错误?
- docker - NGINX 反向代理未将请求主机名转发到 docker 容器
- php - PHP - 加入相等的数组并添加加入的数组计数