清除焦点不起作用

时间:2014-11-17 17:05:07

标签: android

今天我发现了一些关于如何关注EditText焦点的帖子。 建议这样做:

为父布局设置focusable和focuableInTouchMode为true:

<LinearLayout
    android:id="@+id/my_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#000000"
    android:orientation="vertical"
    android:focusable="true"
    android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/calc_input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal" />

并在DialogFragment中使用它:

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        this.textEditCalcInput = (EditText) view.findViewById(R.id.calc_input);
        this.textEditCalcInput.clearFocus();

        view.findViewById(R.id.my_layout).requestFocus();
    }

但不幸的是,这不起作用。当ui出现时,文本字段始终具有焦点。

那么如何消除焦点?

Portrait with Keyboard up and AlertDialog up

Landscape with Keyboard up and AlertDialog (in Background)

在这里,我希望显示AlertDialog并隐藏键盘。

2 个答案:

答案 0 :(得分:0)

而不是

android:focusable="true"
android:focusableInTouchMode="true" 
在LinearLayout中

使用:

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

请注意,您也可以使用

android:windowSoftInputMode="stateHidden"
AndroidManifest.XML中的

另一个解决方案是添加

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

到onCreate of Activity,以便在活动开始时隐藏键盘。

答案 1 :(得分:0)

在清单中试试这个:

    <activity
        android:name=".YourActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="stateHidden" >
    </activity>

如果没有工作,请在您的活动中尝试:

@Override
public void onConfigurationChanged(Configuration mConfig) {
    super.onConfigurationChanged(mConfig);
    int orientation = getResources().getConfiguration().orientation; 
    switch(orientation) {
        case Configuration.ORIENTATION_LANDSCAPE:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        //hide keyboard 

            break;
        case Configuration.ORIENTATION_PORTRAIT:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

           //do whatever you want
            break;
        default:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
            //do whatever you want

            break;
        }
}