创建登录布局,如在Facebook的Facebook应用程序中
我想创建一个具有类似于Facebook应用程序的登录活动/布局的应用程序。 我的意思是当文本字段聚焦时,软键盘会推动整个视图,但不会挤压徽标。 我试过android:windowSoftInputMode="adjustPan/adjustResize"
但它不是我想要实现的。
我在SO上发现这个问题也许会让事情变得更清楚,但它没有解决问题的办法。
我也尝试了各种布局类型,但软键盘只推动了聚焦。 请指导我。
更新:
更新工作解决方案我不能在这里粘贴整个xml文件,但结构应该足够了。 根据Gabe Sechan的回答。
Layout{ Layout top weight 1 Layout mid weight 1 Layout bot weight 1 }
子布局设置为:
android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" // should be changed accordingly to your layout design.
这是活动的Java代码(键盘上/下):
View top, mid, bot; final View activityRootView = findViewById(R.id.loginLayout); activityRootView.getViewTreeObserver().addOnGlobalLayoutListener( new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int heightDiff = activityRootView.getRootView() .getHeight() - activityRootView.getHeight(); if (heightDiff > 100) { //keyboard up mid.setVisibility(View.INVISIBLE); top.setLayoutParams(new TableLayout.LayoutParams( LayoutParams.MATCH_PARENT, 0, 0f)); bot.setLayoutParams(new TableLayout.LayoutParams( LayoutParams.MATCH_PARENT, 0, 1f)); } else {// keyboard down // v.setVisibility(View.VISIBLE); mid.setVisibility(View.VISIBLE); top.setLayoutParams(new TableLayout.LayoutParams( LayoutParams.MATCH_PARENT, 0, 2f)); bot.setLayoutParams(new TableLayout.LayoutParams( LayoutParams.MATCH_PARENT, 0, 3f)); } } });
在键盘上你需要根据键盘向上设计更改权重,然后在键盘上更改回默认设置(通过xml / java设置的布局)。 我已经在2.3.x及更高版本上测试了代码。 并且不要忘记使用android:inputType="textFilter"
作为登录和密码EditText
来删除输入建议并保存一些像素。 在您的活动清单android:windowSoftInputMode="adjustResize|stateHidden"
。 stateHidden
,以便在活动加载时键盘不会启动。 希望能帮助到你。 祝你好运。
他们用相对布局,adjustResize和android:layout_centerVertical来做。 基本上,它们的主要布局采用线性布局,内部有3个相同加权的相对布局。 每个都设置为0dp高度,因此它们占据屏幕的三分之二。 顶部RelativeLayout保持徽标,垂直居中。 中间包含登录字段和按钮,垂直居中,一个在另一个上面。 底部保存版权文本,与底部对齐。 最终结果是,当键盘出现时,3个相对布局的大小调整为新屏幕的1/3。 然后他们的元素在新屏幕中居中。
请记住,您需要adjustResize窗口模式来获取此function,如果您使用它,它将向上移动,徽标将向中心滚动。
在Eclipse中,转到File | New | Other,然后在随后的向导中选择Android Activity,然后在下一页上,从活动列表中选择LoginActivity。 这具有您正在讨论的确切布局,您可以将其用作框架。 它使用ScrollView来实现您正在寻找的效果。