我意识到这有点奇怪,但我有一个按钮需要看起来像一样的EditText但仍然像按钮一样。我的布局XML目前看起来像这样:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/editTextStyle" />
这给了它一个EditText的外观,但是由于阻止了onClick事件被触发,除非按钮具有焦点(有效地使它需要两次点击),所以还会稍微混淆行为。有没有办法保持风格而不改变按钮的行为?
我考虑过制作一个看起来像EditText的9补丁背景,但是有很多不同的Android版本和皮肤,如果可能的话,我宁愿使用系统风格。
答案 0 :(得分:28)
一个行为类似于按钮的EditText怎么样?
<EditText android:id="@+id/Edit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="true"/>
您也可以为它定义OnClickListener。它不会成为焦点。
答案 1 :(得分:1)
如果它绝对需要是一个按钮,你可以在你的按钮上添加一个焦点监听器,当按钮获得焦点时,它会触发onclick。
weirdoButton.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(hasFocus) {
weirdoButton.performClick();
}
}
});
缺点是当按钮通过轨迹球或d-pad获得焦点时,点击将会激活。使其在布局文件中无法聚焦:
<Button
android:id="@+id/weirdoButton"
android:layout_width="match_parent"
android:layout_height="50dip"
android:focusable="false"
style="?android:attr/editTextStyle" />
答案 2 :(得分:0)
接受的答案确实让你将EditText设为一个按钮,但我发现它有差异;当你长按它时,它可以让你将文字粘贴到它上面,这在UX方面很糟糕。
这是我应用的方式,将其设计为EditText。
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="16sp"
android:focusable="false"
android:id="@+id/btnAddMember"
style="?android:attr/editTextStyle"
android:focusableInTouchMode="false"
android:clickable="true"
android:hint="Button Content"/>