【问题标题】:Stop edittext gaining focus with scroll view in activity - android停止edittext在活动中通过滚动视图获得焦点 - android
【发布时间】:2017-05-08 18:55:32
【问题描述】:

关于如何阻止edittext获得对活动启动的关注有很多问题和答案。

但是,所有解决方案都对我有用,并且 edittext 在启动时没有获得焦点,但这会阻止滚动视图滚动。

我尝试了帖子中的几乎所有解决方案: Stop EditText from gaining focus at Activity startup 它不适用于活动中的滚动视图。

这给我带来了很多麻烦。任何帮助都会很棒。

谢谢

尝试了以下方法:

  1. 防止 AutoCompleteTextView 接收焦点的虚拟项目
  2. 设置编辑文本属性:设置属性android:focusable="true"和android:focusableInTouchMode="true"

这是我的 xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/content_home"


    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"

    tools:showIn="@layout/activity_home">


    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:fitsSystemWindows="false">


        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">


            <ProgressBar
                android:id="@+id/progressBar"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_centerInParent="true"
                android:visibility="gone" />


            <TextView
                android:id="@+id/textViewLinkToOrder"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="20dp"
                android:layout_marginTop="20dp"
                android:gravity="center"
                android:text="Click here to book travel insurance."
                android:textColor="@color/colorPrimary"
                android:textSize="24sp"

                />

            <LinearLayout
                android:id="@+id/buttons_linear_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/textViewLinkToOrder"
                android:orientation="horizontal">

                <Button
                    android:id="@+id/choose_country_button"
                    android:layout_width="200dp"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/textViewLinkToOrder"
                    android:layout_centerHorizontal="true"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp"
                    android:layout_weight="1"
                    android:background="@color/colorPrimary"
                    android:onClick="onChooseCountryButtonClick"
                    android:text="Choose country"
                    android:textColor="#ffff" />


                <Button
                    android:id="@+id/automatic_country_button"
                    android:layout_width="200dp"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/choose_country_button"
                    android:layout_centerHorizontal="true"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp"
                    android:layout_weight="1"
                    android:background="@color/colorPrimary"
                    android:text="My Location"
                    android:textColor="#fff" />


            </LinearLayout>


            <LinearLayout
                android:id="@+id/linearLayoutAllDetails"
                android:layout_width="match_parent"

                android:layout_height="wrap_content"
                android:layout_below="@id/buttons_linear_layout"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/textView_coumtry_name"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:padding="5dp"
                    android:text="No country yet selected"
                    android:textColor="#000000"
                    android:textSize="30sp"
                    android:textStyle="bold" />

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="#e8e8e8"
                    android:padding="10dp">

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal">


                        <LinearLayout
                            android:layout_width="0dp"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:orientation="horizontal">

                            <EditText
                                android:id="@+id/editTextFromCurrency"
                                android:layout_width="80sp"
                                android:layout_height="50sp"

                                android:background="@drawable/edit_txt_bg"
                                android:ems="10"
                                android:inputType="number"
                                android:text="1" />

                            <TextView
                                android:id="@+id/textViewFromCurrency"
                                android:layout_width="wrap_content"
                                android:layout_height="match_parent"
                                android:layout_marginLeft="10dp"
                                android:layout_marginStart="10dp"
                                android:gravity="center"
                                android:text="None"
                                android:textColor="#000000"
                                android:textSize="17sp" />

                        </LinearLayout>

                        <LinearLayout
                            android:layout_width="0dp"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:orientation="horizontal">

                            <EditText
                                android:id="@+id/editTextToCurrency"
                                android:layout_width="80sp"
                                android:layout_height="50sp"
                                android:background="@drawable/edit_txt_bg"

                                android:ems="10"
                                android:inputType="number"
                                android:text="1" />

                            <TextView
                                android:id="@+id/textViewToCurrency"
                                android:layout_width="wrap_content"
                                android:layout_height="match_parent"
                                android:layout_marginLeft="10dp"
                                android:layout_marginStart="10dp"
                                android:gravity="center"
                                android:text="New Israeli Shekel"
                                android:textColor="#000000"
                                android:textSize="17sp" />
                        </LinearLayout>
                    </LinearLayout>
                </RelativeLayout>


                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="horizontal"
                    android:paddingBottom="20dp"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:paddingTop="20dp">

                    <ImageView
                        android:layout_width="40dp"
                        android:layout_height="40dp"
                        android:src="@drawable/police" />

                    <TextView
                        android:id="@+id/textView"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp"
                        android:text="Police"
                        android:textColor="#000000"
                        android:textSize="17sp" />

                    <TextView
                        android:id="@+id/police_text_view"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp"
                        android:text=""
                        android:textColor="#000000"
                        android:textSize="17sp" />

                    <View
                        android:layout_width="0dp"
                        android:layout_height="0dp"
                        android:layout_weight="1" />

                    <ImageView
                        android:id="@+id/police_phone_button"
                        android:layout_width="30dp"
                        android:layout_height="30dp"
                        android:layout_gravity="center_vertical"
                        android:src="@android:drawable/sym_action_call" />

                </LinearLayout>


                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:paddingBottom="20dp"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:paddingTop="20dp">

                    <ImageView
                        android:layout_width="40dp"
                        android:layout_height="40dp"
                        android:src="@drawable/ambulance" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp"
                        android:text="Ambulance"
                        android:textColor="#000000"
                        android:textSize="17sp" />

                    <TextView
                        android:id="@+id/ambulance_text_view"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp"
                        android:text=""
                        android:textColor="#000000"
                        android:textSize="17sp" />

                    <View
                        android:layout_width="0dp"
                        android:layout_height="0dp"
                        android:layout_weight="1" />

                    <ImageView
                        android:id="@+id/ambulance_phone_button"
                        android:layout_width="30dp"
                        android:layout_height="30dp"
                        android:layout_gravity="center_vertical"
                        android:src="@android:drawable/sym_action_call" />

                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:paddingBottom="20dp"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:paddingTop="20dp">

                    <ImageView
                        android:layout_width="40dp"
                        android:layout_height="40dp"
                        android:src="@drawable/israel_consulate" />

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:orientation="vertical">

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginLeft="10dp"
                            android:layout_marginRight="10dp"
                            android:text="Israel Consulate"
                            android:textColor="#000000"
                            android:textSize="17sp" />

                        <TextView
                            android:id="@+id/israel_consulate_text_view"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginLeft="10dp"
                            android:layout_marginRight="10dp"
                            android:text=""
                            android:textColor="#000000"
                            android:textSize="17sp" />
                    </LinearLayout>

                    <View
                        android:layout_width="0dp"
                        android:layout_height="0dp"
                        android:layout_weight="1" />

                    <ImageView
                        android:id="@+id/israel_phone_button"
                        android:layout_width="30dp"
                        android:layout_height="30dp"
                        android:layout_gravity="center_vertical"
                        android:src="@android:drawable/sym_action_call"

                        />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:paddingBottom="20dp"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:paddingTop="20dp">

                    <ImageView
                        android:layout_width="40dp"
                        android:layout_height="40dp"
                        android:src="@drawable/chabad" />


                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:orientation="vertical">

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginLeft="10dp"
                            android:layout_marginRight="10dp"
                            android:text="Chabad"
                            android:textColor="#000000"
                            android:textSize="17sp" />

                        <TextView
                            android:id="@+id/chabad_number_text_view"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginLeft="10dp"
                            android:layout_marginRight="10dp"
                            android:text=""
                            android:textColor="#000000"
                            android:textSize="17sp" />


                        <TextView
                            android:id="@+id/chabad_address_text_view"
                            android:layout_width="150dp"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginLeft="10dp"
                            android:layout_marginRight="10dp"
                            android:text=""
                            android:textColor="#000000"
                            android:textSize="13sp" />

                    </LinearLayout>

                    <View
                        android:layout_width="0dp"
                        android:layout_height="0dp"
                        android:layout_weight="1" />

                    <ImageView
                        android:id="@+id/chabad_phone_button"
                        android:layout_width="30dp"
                        android:layout_height="30dp"
                        android:layout_gravity="center_vertical"
                        android:src="@android:drawable/sym_action_call" />

                </LinearLayout>
            </LinearLayout>
        </RelativeLayout>
    </ScrollView>
</RelativeLayout>

【问题讨论】:

  • 分享你的布局和你所做的阻止滚动视图滚动的代码
  • 尝试将滚动视图嵌套在框架布局中。
  • 你试过在根滚动视图中使用这个android:descendantFocusability="blocksDescendants"
  • 这不起作用

标签: android android-edittext scrollview


【解决方案1】:

获得所需结果的另一种方法是隐藏设备的虚拟键盘。这将禁止 EditText 获得焦点,因此不会滚动屏幕。您可以使用此功能实现此目的:

public static void hideKeyboard(Activity activity) {
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    //Find the currently focused view, so we can grab the correct window token from it.
    View view = activity.getCurrentFocus();
    //If no view currently has focus, create a new one, just so we can grab a window token from it
    if (view == null) {
        view = new View(activity);
    }
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

这样调用:hideKeyboard(this);,优先在你的 onCreate() 方法中。

如果用户点击 EditText,虚拟键盘会再次显示。

【讨论】:

  • 这并没有隐藏键盘
  • 可能是因为您有两个 EditText。仅出于测试原因尝试排除一个。这是防弹的,相信我。您可以实现一个函数,一旦使用第一个 EditText,就显示第二个(非常简单:从 xml 属性“hidden”开始第二个,然后是“setVisibility”)。
  • 好的,这是一个简单干净的滚动视图,带有线性布局,漂亮、智能和客观,并且适用于许多 API。你不需要说谢谢宝贝。开心点。
猜你喜欢
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 2017-12-29
  • 2023-04-03
  • 1970-01-01
  • 2011-06-21
相关资源
最近更新 更多