禁用焦点在EditText上

时间:2014-08-08 03:09:37

标签: android

我正在使用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);

                        }
                    });

我想知道是否有类似内容,如果点击edit1edit2将被停用。但是当我点击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>

2 个答案:

答案 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>