2011-11-28 44 views
7

我意识到这是一种奇怪的事情要做,但我有一个按钮,需要看起来像一个EditText但仍然表现得像一个按钮。我的布局XML目前看起来是这样的:风格一个按钮看起来像一个EditText(但仍然像一个按钮)

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    style="?android:attr/editTextStyle" /> 

通过防止被解雇,除非按钮具有焦点onClick事件(这实际上使得给它一个EditText的外观,而且还与行为搅乱一点点需要两次点击)。有没有办法保持样式而不改变按钮的行为?

我想过只是制作了一个看起来像EditText的九贴片背景,但有很多不同的Android版本和皮肤,如果可能的话,我宁愿使用系统风格。

回答

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

如果是我,我会为此而努力。 – dmon

+1

谢谢,有同样的需要......那就是我所说的“在盒子外面”。 – Shahar

1

如果它绝对需要是一个按钮,您可以添加一个焦点侦听器到您的按钮,当按钮获得焦点时触发onclick。

weirdoButton.setOnFocusChangeListener(new OnFocusChangeListener() { 

    @Override 
    public void onFocusChange(View view, boolean hasFocus) { 
    if(hasFocus) { 
     weirdoButton.performClick(); 
    } 
    } 
}); 

的缺点是,当按钮接收经由轨迹球或d-垫聚焦点击将闪光。使其在布局文件中不可聚焦:

<Button 
    android:id="@+id/weirdoButton" 
    android:layout_width="match_parent" 
    android:layout_height="50dip" 
    android:focusable="false" 
    style="?android:attr/editTextStyle" /> 
0

接受的答案确实让您将EditText设置为按钮,但我发现它存在差异;当你长时间按下它时,它会让你粘贴文本,这在用户体验方面是非常糟糕的。

这是我应用而不是将其设置为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"/> 
相关问题