2

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/defaut_padding" >

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/defaut_padding"
        android:orientation="vertical" >

        <FrameLayout
            android:id="@+id/photo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <ImageView
                android:id="@+id/picture"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:scaleType="fitXY" />

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:layout_margin="10dp"
                android:background="@drawable/watermark" />

            <ProgressBar
                android:id="@+id/bitmap_loading"
                style="?android:attr/progressBarStyleLarge"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:visibility="visible" />
        </FrameLayout>

        <FrameLayout
            android:id="@+id/user"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/photo"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="-30dp"
            android:background="@android:color/white"
            android:padding="@dimen/smallest_padding" >

            <ImageView
                android:id="@+id/user_picture"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/anonymous_user" />
        </FrameLayout>

        <TextView
            android:id="@+id/user_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/user"
            android:layout_marginLeft="@dimen/defaut_padding"
            android:layout_toRightOf="@id/user"
            android:text="@string/anonymous_user"
            android:textStyle="bold" />
    </RelativeLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
<EditText
    android:id="@+id/input_description"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="top"
    android:padding="5dp"
    android:layout_marginBottom="@dimen/defaut_padding"
    android:background="@drawable/textfield"
    android:hint="@string/description_hint"
    android:focusableInTouchMode="true"
    android:maxLines="3"
    android:scrollbars="vertical" />

<Button
    android:id="@+id/publish"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/confirm_button_selector"
    android:text="@string/confirm_button"
    android:textColor="@android:color/white"
    android:textSize="@dimen/big_text_size"
    android:textStyle="bold" />

    </FrameLayout>
</LinearLayout>

</ScrollView>

当我开始在 EditText 上输入数字时,我想在出现软键盘时滚动它。我怎样才能做到这一点?当前滚动有效,但键盘出现在按钮上方,我想要键盘上方的按钮

当用户单击 EditText 时,我尝试移动 scrool,执行以下操作:

mSv.scrollTo(0, mSv.getBottom());

其中 mSv 是我的 ScrollView

但它仅在用户第二次单击 EditText 时才有效。

感谢您的任何帮助。

4

3 回答 3

2

尝试将您的键盘更改为平移而不是调整大小。您可以在您的AndroidManifest.xml文件中执行此操作,对于您的特定Activity,将以下内容添加到其中

android:windowSoftInputMode="adjustPan"

或者

如果你想隐藏然后:

EditText editTextSearch = (EditText) findViewById(R.id.editTextSearch);

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextSearch.getWindowToken(), 0);

如果要显示:

EditText editTextSearch = (EditText) findViewById(R.id.editTextSearch);
editTextSearch.requestFocus();
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
于 2016-05-17T13:11:18.180 回答
0

如果您使用与底部对齐的RelativeLayout(outside of ScrollView),它将粘在可用屏幕的底部——在键盘上方。ScrollView然后需要一个底部边距才能不覆盖按钮。

<?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" >  

    <ScrollView      
        android:layout_height="match_parent"
        android:layout_width="match_parent"    
        android:orientation="vertical"      
        android:layout_marginBottom="48dp" >    

        /* Here your elements ... like EditText */

    </ScrollView>   

    <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical" 
         android:layout_marginBottom="0px"
         android:layout_alignParentBottom="true" > 

        <Button      
         android:layout_width="fill_parent"  
         android:layout_height="48dp"
         android:text="ddd" />        

    </RelativeLayout>
</RelativeLayout>

仅当您(据我评估)时才有效

  • 有一个RelativeLayout作为父母
  • 除了包含按钮之外,还有一个ScrollView作为唯一的孩子或有另一个包含某个地方的视图(例如)(无论出于何种原因)RelativeLayoutLinearLayoutScrollView

如果您不希望按钮始终粘在底部,则需要按照 Pragnani 的链接中的说明检测键盘是否显示。

于 2013-03-20T20:31:42.033 回答
0

检查这个SO 答案。它应该解决问题“..按钮将出现在整个布局上,我想要做的是使整个布局(按钮和其他视图滚动)”

于 2020-04-01T19:40:23.427 回答