创建登录布局,如在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来实现您正在寻找的效果。