이 활동을 시작할 때마다 항상 맨 아래로 시작하여 맨 아래로 스크롤됩니다. 나는 스크롤 위치를 변경할 것으로 예상되는 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로 스크롤되지 않습니다.