[android] 내 Android 활동이 항상 맨 아래로 스크롤되기 시작하는 이유는 무엇입니까?

이 활동을 시작할 때마다 항상 맨 아래로 시작하여 맨 아래로 스크롤됩니다. 나는 스크롤 위치를 변경할 것으로 예상되는 OnCreate 활동 (또는 그 문제에 대한 모든 곳)에서 이상한 일을하고 있지 않습니다. 포커스를 최상위 포커스 가능한 컨트롤과 scrollto 메서드로 설정하려고 시도했지만 둘 다 작동하지 않습니다. 게다가 내 다른 활동에는이 문제가 없습니다. 레이아웃은 다음과 같습니다.

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/edit_refresh_update_header"
            android:textSize="18sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Variable:"
            android:textSize="18sp"/>

        <Spinner
            android:id="@+id/edit_refresh_variables_spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Network:"
            android:textSize="18sp"/>

        <RadioGroup
            android:id="@+id/widget1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical">

            <RadioButton
                android:text="Web"
                android:id="@+id/edit_refresh_update_rb_web"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="NetRadioButtonSelected"
                android:checked="true"/>

            <RadioButton
                android:text="Socket Server"
                android:id="@+id/edit_refresh_update_rb_socket_server"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="NetRadioButtonSelected"/>
        </RadioGroup>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Socket server request type:"
            android:textSize="18sp"/>

        <Spinner
            android:id="@+id/edit_refresh_socket_server_req_types_spinner"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Socket server body:"
            android:textSize="18sp"/>

        <EditText
            android:layout_width="match_parent"
            android:id="@+id/edit_refresh_update_ss_body"
            android:layout_height="wrap_content"
            android:enabled="false"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Url:"
            android:textSize="18sp"/>

        <EditText
            android:layout_width="match_parent"
            android:id="@+id/edit_refresh_update_url"
            android:layout_height="wrap_content"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>

        <Button
            android:text="Save refresh update"
            android:id="@+id/edit_refresh_save_btn"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:layout_marginBottom="20dp"
            android:layout_alignParentBottom="true"
            android:onClick="SaveRefreshUpdate">
        </Button>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>
    </LinearLayout>
</ScrollView>



답변

Android가 활동을 시작하면 일부 제어에 집중해야합니다. 포커스를받을 지정된 컨트롤이 없으면 시스템은 포커스를 원하는 첫 번째 적합한 컨트롤을 선택합니다. 당신이 당신의 LinearLayout에 다음과 같은 속성을 설정하면 – android:focusableInTouchMode="true"당신은 LinearLayout시작에 집중 될 것이며 활동하지 않습니다 스크롤을 EditText아래있다.


답변

레이아웃의 항목을 오염시키는 대신 다음을 활동 / 클래스에 추가 할 수 있습니다.

    ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView);
    scrollView.setFocusableInTouchMode(true);
    scrollView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);

이렇게하면 scrollView 내의 요소가 포커스를 얻는 것이 아니라 첫 번째 포커스를 얻는 컨테이너로서의 scrollView가 그 후 자식 뷰로 이동합니다.


답변

이 코드를 시도해 볼 수 있습니다.

scroller.post(new Runnable() {
    public void run() {
        scroller.fullScroll(ScrollView.FOCUS_DOWN);
    }
}); 

[N : B] [참조 링크] 1


답변

devmiles.com이 말한 것과 함께.

LinearLayout-android : focusableInTouchMode = “true”에서 다음 속성을 설정하면 LinearLayout이 시작에 초점을 맞추고 활동이 하단의 EditText로 스크롤되지 않습니다.

선형 레이아웃의 하단에있는 뷰에서 requestLayout ()을 호출하면 최상위 뷰에서 포커스를 훔칠 수 있습니다. 따라서 하위 뷰에서 requestLayout ()을 호출 한 후 선형 레이아웃의 가장 위에있는 뷰에서 requestFocus ()를 호출하면됩니다.


답변

fullScroll 메서드를 사용해 보셨습니까? http : //developer.android.com/reference/android/widget/ScrollView.html#fullScroll (int)

yourScrollView.fullScroll(ScrollView.FOCUS_UP);


답변

Xamarin Android 개발의 경우 @Graeme 솔루션을 수행하려면 다음을 수행하십시오.

// Set Focus to ScrollView
ScrollView scrollView = (ScrollView)FindViewById(Resource.Id.scrollView);
scrollView.FocusableInTouchMode = true;
scrollView.DescendantFocusability = Android.Views.DescendantFocusability.BeforeDescendants;


답변

onCreate ()에서 초점을 맞출 수 없게 만드십시오.

editText.setFocusable(false);

그리고 사용

editText.setOnClickListener(new ....){
 ......
  editText.setFocusable(true);
  editText.setFocusableInTouchMode(true);
  editText.requestFocus();

  showSoftKeyboard(); //Use InputMethodManager to open soft Keyboard

 ......
 };

다음에 조각이나 활동이 생성 될 때 Edittext로 스크롤되지 않습니다.