我正在使用setOnFocusChangeListener
,但我正在为我的应用寻找更可行的东西。目前这正是我正在使用的。
if(primaryCode == CodeCC)
{
mKeyboardView= (KeyboardView)mHostActivity.findViewById(R.id.keyboardview);
mKeyboardView.setKeyboard(new Keyboard(mHostActivity, R.xml.symbol2keyboard));
mKeyboardView.setPreviewEnabled(false); // NOTE Do not show the preview balloons
mKeyboardView.setOnKeyboardActionListener(symbol2Keyboard);
final EditText edit1 = (EditText) mHostActivity.findViewById(R.id.row1);
final EditText edit2 = (EditText) mHostActivity.findViewById(R.id.row2);
final EditText edit3 = (EditText) mHostActivity.findViewById(R.id.row3);
final EditText edit4 = (EditText) mHostActivity.findViewById(R.id.row4);
edit1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
{
edit2.setEnabled(false);
}else
edit2.setEnabled(true);
}
});
我想知道是否有类似内容,如果点击edit1
,edit2
将被停用。但是当我点击edit2
时,edit2
将被启用,但edit3
将被禁用等。
现在,当edit2
启用时,我甚至无法点击它,或者它不允许焦点位于edit2
。它是固定的,还是有其他方法可以解决?
由于
Layout Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/backselection"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="@string/back" />
<Button
android:id="@+id/nextselection"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="@string/next" />
<TabHost
android:id="@+id/tabHost"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:id="@+id/textModeTab"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<EditText
android:id="@+id/row1"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:inputType="text" />
<EditText
android:id="@+id/row2"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_below="@id/row1"
android:layout_marginTop="20dp"
android:inputType="text" />
<EditText
android:id="@+id/row3"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_below="@id/row2"
android:layout_marginTop="20dp"
android:inputType="text" />
<EditText
android:id="@+id/row4"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_below="@id/row3"
android:layout_marginTop="20dp"
android:inputType="text" />
<CheckBox
android:id="@+id/row4CB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/row2"
android:layout_alignBottom="@+id/row2"
android:layout_alignParentRight="true"
android:layout_marginTop="20dp" />
<CheckBox
android:id="@+id/row3CB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/row1"
android:layout_alignBottom="@+id/row1"
android:layout_alignLeft="@+id/row4CB"
android:layout_marginTop="20dp" />
<CheckBox
android:id="@+id/row1CB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/row3"
android:layout_alignBottom="@+id/row3"
android:layout_alignLeft="@+id/row4CB"
android:layout_marginTop="20dp" />
<CheckBox
android:id="@+id/row2CB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/row4"
android:layout_alignBottom="@+id/row4"
android:layout_alignLeft="@+id/row1CB"
android:layout_marginTop="20dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/row3CB"
android:text="Scroll"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textStyle="bold" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/graphicsModeTab"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</RelativeLayout>
<RelativeLayout
android:id="@+id/animationModeTab"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</RelativeLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
</RelativeLayout>
答案 0 :(得分:0)
我认为这是不可能的。如果禁用某个元素,它将无法响应任何事件,包括焦点事件。您可能仍然会关注另一个元素,然后应该启用edit2,因为edit1将失去焦点。这按设计工作。
我不建议这样做,但您可以尝试扩展Button
类以覆盖其禁用的行为。它应该在禁用状态下绘制,同时实际启用。我无法提供任何代码示例,因为我自己无法快速实现它。
检查View
类和Drawable
实现的来源。
答案 1 :(得分:0)
这假设你绝对需要这个功能,离不开它: 您可以做的是稍微改变您的布局。在每个编辑文本的顶部放置一个透明的相对布局。当触发编辑文本的单击时,您可以相应地禁用所需的所有内容,并使相对布局不可见并请求焦点在你的编辑文本上。它有点单调乏味但布局掩盖为你正在尝试的事情打开了大量的可能性。
如果您需要代码示例,请添加您的布局代码并对我的回答发表评论。我会更新它。
编辑:添加了代码 你去。我不喜欢黑客,但它做你想要的。你可能需要调整键盘开口,使其更好。
活动
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView row1, row2;
private EditText row1Et, row2Et;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
row1 = (TextView) findViewById(R.id.row1cover);
row2 = (TextView) findViewById(R.id.row2cover);
row1Et = (EditText) findViewById(R.id.row1);
row2Et = (EditText) findViewById(R.id.row2);
row1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
row1.setVisibility(View.INVISIBLE);
row2.setVisibility(View.VISIBLE);
row1Et.setEnabled(true);
row2Et.setEnabled(false);
row1Et.requestFocus();
row1Et.performClick();// to open the key
Log.d("disabled", "1 is disabled?:" + row1Et.isEnabled());
Log.d("disabled", "2 is disabled?:" + row2Et.isEnabled());
}
});
row2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
row2.setVisibility(View.INVISIBLE);
row1.setVisibility(View.VISIBLE);
row1Et.setEnabled(false);
row2Et.setEnabled(true);
row2Et.requestFocus();
row2Et.performClick();
Log.d("disabled", "2 is disabled?:" + row2Et.isEnabled());
Log.d("disabled", "1 is disabled?:" + row1Et.isEnabled());
}
});
OnFocusChangeListener focusListener = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
} else {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
};
row1Et.setOnFocusChangeListener(focusListener);
row2Et.setOnFocusChangeListener(focusListener);
}
}
和布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
>
<Button
android:id="@+id/backselection"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="back" />
<Button
android:id="@+id/nextselection"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="next" />
<RelativeLayout
android:id="@+id/textModeTab"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<EditText
android:id="@+id/row1"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:inputType="text" />
<TextView
android:id="@+id/row1cover"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/row1"
android:layout_alignTop="@id/row1" />
<EditText
android:id="@+id/row2"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_below="@id/row1"
android:layout_marginTop="20dp"
android:inputType="text" />
<TextView
android:id="@+id/row2cover"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/row2"
android:layout_alignTop="@id/row2" />
<CheckBox
android:id="@+id/row1CB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/row1"
android:layout_alignBottom="@+id/row1"
android:layout_marginTop="20dp"
android:layout_toRightOf="@+id/row1" />
<CheckBox
android:id="@+id/row2CB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/row2"
android:layout_alignBottom="@+id/row2"
android:layout_marginTop="20dp"
android:layout_toRightOf="@+id/row2" />
</RelativeLayout>