Android - 显示键盘时按下布局顶栏

时间:2015-01-13 11:33:06

标签: android android-layout android-softkeyboard android-scrollview android-fullscreen

我有一个简单的布局:

  • 带保存和后退按钮的顶栏(如操作栏)
  • 在滚动视图下方,内部有一些EditText ...(查看下图),

enter image description here

当我打电话给键盘时,我的视线就在上面......我希望我的顶栏能够始终保持可见并固定在顶部...(查看下面的图像,了解正在发生的事情以及我希望发生什么)

enter image description here

我使用android:windowSoftInputMode尝试了多个解决方案,将顶部栏设置为相对布局,并在isScrollContainer中设置scrollview但是没有一个适用于我...

以下代码:

    <RelativeLayout
  android:id="@+id/llWriteCommentWall"
  style="@style/TextSubSeparator"
  android:layout_height="wrap_content"
  android:layout_width="wrap_content">

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
    style="@style/TextSubSeparator"
    android:layout_marginBottom="@dimen/margin_separator_bottom"
    android:layout_alignParentTop="true">

    <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="fill_parent" 
        android:gravity="left|center_horizontal|center_vertical"
        android:orientation="horizontal" 
        android:layout_marginTop="@dimen/margin_title_top"
        android:layout_marginBottom="@dimen/margin_title_bottom"
        android:layout_marginLeft="@dimen/margin_title_left"
        android:layout_marginRight="@dimen/margin_title_right"
        >

        <ImageView
            android:id="@+id/ivMainMenu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"  
            android:scaleType="fitCenter"  
            android:src="@drawable/tk_btn_home"
            android:onClick="clickHome"/>

    </LinearLayout>

    <TextView
        android:id="@+id/tvSeconHeader"
        android:text="@string/title"
        android:layout_width="match_parent"
        android:layout_weight="2.5"
        android:layout_height="match_parent"
        android:gravity="center" 
        style="@style/TextTileHealth"/>

    <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="fill_parent" 
        android:gravity="right|center_horizontal" 
        android:orientation="horizontal" 
        android:layout_marginTop="@dimen/margin_title_top"
        android:layout_marginBottom="@dimen/margin_title_bottom"
        android:layout_marginLeft="@dimen/margin_title_left"
        android:layout_marginRight="@dimen/margin_title_right">
        <ImageView
            android:id="@+id/ivSave"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"  
            android:scaleType="fitCenter"  
            android:src="@drawable/tk_btn_tab_save"
            android:onClick="clickSave"/>

    </LinearLayout>

</LinearLayout>
</RelativeLayout>


<ScrollView 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:isScrollContainer="false">
    <LinearLayout 
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/margin_separator_bottom"
        android:gravity="center">   

                    <!-- EditBoxes  -->
                    <LinearLayout 
                        android:orientation="vertical"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent">    
                        <EditText
                            android:id="@+id/et1" 
                            style="@style/TextEditBox"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content" 
                            android:digits="0123456789."
                            android:inputType="numberDecimal"
                            android:maxLength="3"
                            android:layout_weight="0.33"
                            android:gravity="center"
                            android:ems="3"                 
                            android:layout_marginBottom="10dp"/>

                        <EditText
                            android:id="@+id/et2" 
                            style="@style/TextEditBox"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content" 
                            android:digits="0123456789."
                            android:inputType="numberDecimal"
                            android:maxLength="3"
                            android:layout_weight="0.33"
                            android:gravity="center"
                            android:ems="3"
                            android:layout_marginBottom="10dp"/>
                        <EditText
                            android:id="@+id/et3" 
                            style="@style/TextEditBox"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content" 
                            android:digits="0123456789."
                            android:inputType="numberDecimal"
                            android:maxLength="3"
                            android:layout_weight="0.33"
                            android:gravity="center"
                            android:ems="3"/>                   
                         </LinearLayout>    

    </LinearLayout>
</ScrollView>

和Manifest:

    <activity
        android:name="com.example.slyzer.gui.new.NewValue"
        android:label="@string/app_name"
        android:windowSoftInputMode="adjustResize"
        android:screenOrientation="portrait">
    </activity> 

编辑:

我最近发现,当您将活动设为全屏时:

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

,窗户开始与平时不同: https://code.google.com/p/android/issues/detail?id=5497&q=fullscreen&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

并且正如Dianne Hackborn在here中所描述的那样,这就是它的工作原理,似乎没有兴趣改变它。

所以,我尝试了Joseph Johnson's AndroidBug5497Workaround,但我的键盘上面总是有一个“额外”的空白条,而View钢并没有像我想要的那样显示......

有没有人对此问题有一个很好/简单的解决方案?

2 个答案:

答案 0 :(得分:0)

活动清单中的

android:windowSoftInputMode="adjustResize"会将顶部栏保留在视图中,并调整滚动视图的大小以使用剩余的空间。

我能看到的唯一问题就是在调整文本大小调整之后将其与可视区域对齐(如果需要)

答案 1 :(得分:0)

将其添加到清单中的活动代码:

android:windowSoftInputMode="adjustPan"

或以编程方式:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);