首页 > 代码库 > 使用adjustResize属性笔记
使用adjustResize属性笔记
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">要使用adjustResize的属性必须要先布局好,当然前提是这个activity不能是FullScreen的,否则设置的adjustResize将失效,这句是看网上人说的,具体没有去测试。</span>
目前项目中的不是FullScreen,但是由于是别人写的布局代码,然后发现在配置文件里配置了adjustResize属性,但是这个View就是不能随着键盘的显示而变换size,
于是写了个测试的android项目,首先模拟了这个布局的轮廓,就是写LinearLayout嵌套LinearLayout嵌套widget等的东西,如:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <LinearLayout android:id="@+id/head" android:layout_width="fill_parent" android:layout_height="100dp" android:background="#555666" android:orientation="horizontal" > <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:orientation="horizontal" > </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:orientation="horizontal" > </LinearLayout> </LinearLayout> <LinearLayout android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="300dp" android:layout_below="@id/head" android:background="#ffffff" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="150dp" android:orientation="horizontal" > </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:orientation="horizontal" > </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:orientation="horizontal" > </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="bottom" android:orientation="horizontal" > <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:orientation="horizontal" > <EditText android:id="@+id/edt" android:layout_width="fill_parent" android:layout_height="50dp" android:hint="@string/edit_str" /> </LinearLayout> </LinearLayout> </LinearLayout> <!-- <EditText android:layout_width="fill_parent" android:layout_height="50dp" android:hint="@string/edit_str" android:id="@+id/edt" android:layout_above="@+id/text"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="fasdfasdgfdgfg" android:id="@+id/text" android:layout_above="@+id/btn"/> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="fadsfsafsd" android:layout_alignParentBottom="true" /> --> </RelativeLayout>
测试这个布局,点击linearlayout里面的edit的时候即使activity配置了adjustResize属性依然不起效。但是如果修改这个布局,将里面的
<LinearLayout android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="300dp" android:layout_below="@id/head" android:background="#ffffff" android:orientation="vertical" >修改成
<LinearLayout android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="300dp" android:layout_below="@id/head" android:background="#ffffff" android:orientation="vertical" android:gravity="bottom" >
然后就可以实现adjustResize的属性特性了,为什么会这样呢?我认为可能跟布局的layout的绘画顺序机制有关系,
因为这个Linearlayout的gravity为bottom的时候,是将layout里面的widget放在这个layout的最底下,也就是说,这个layout的top可以是空白的(前提是这个layout比包裹的widget高更大),这时这个adjustResize就起效了,但是如果将layout的gravity改成top的话这个adjustResize就失效了,即使这个layout正好包裹里面的widget,甚至是wrap类型这个adjustResize也是失效的。如:
<LinearLayout android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/head" android:background="#ffffff" android:orientation="vertical" android:gravity="top" > <LinearLayout android:layout_width="fill_parent" android:layout_height="150dp" android:orientation="horizontal" > </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:orientation="horizontal" > </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:orientation="horizontal" > </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="bottom" android:orientation="horizontal" > <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:orientation="horizontal" > <EditText android:id="@+id/edt" android:layout_width="fill_parent" android:layout_height="50dp" android:hint="@string/edit_str" /> </LinearLayout> </LinearLayout> </LinearLayout>
所以总结一下如果要使adjustResize起效的话,必须要考虑好布局,布局必须要让最底下的widget或者layout的位置为android:layout_alignParentBottom="true"才能使之生效。
但是有时候如果说edit在中间,但是edit下面的layout的高度太长了,如果这样做的话,使用adjustResize是可以实现它的效果,resize,但是很可能看不到这个edit,这个edit被挤出去了,如果是这种情况我觉得可能需要去监听下最外层的layout的onsizechanged事件,然后在该事件里重新修改它的布局……具体要测试使用了才知道。感兴趣的测试下吧,欢迎把结果告诉我,谢谢!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。