在 facebook 应用程序中创建登录布局,如 android

Posted

技术标签:

【中文标题】在 facebook 应用程序中创建登录布局,如 android【英文标题】:Creating login layout like in facebook app for android 【发布时间】:2013-04-09 15:16:11 【问题描述】:

我想制作一个登录活动/布局类似于 Facebook 应用的应用。我的意思是当文本字段聚焦时,软键盘会向上推动整个视图,但不会挤压徽标。我已经尝试过android:windowSoftInputMode="adjustPan/adjustResize",但这不是我想要实现的目标。

我在 SO 上找到了this 问题,也许它会让事情变得更清楚,但它没有解决问题。

我也尝试过各种布局类型,但它的软键盘只会将焦点 向上推。请指导我。

更新:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:background="#DDDDDD">
    <RelativeLayout 
        android:
        android:layout_weight="1"
        android:layout_
        android:layout_
        android:background="#ff0000">
        <ImageView
            android:layout_centerVertical="true"
            android:layout_
            android:layout_></ImageView>
    </RelativeLayout>
    <RelativeLayout 
        android:
        android:layout_
        android:layout_weight="1"
        android:layout_
        android:background="#00ff00">
    </RelativeLayout>

    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:background="#0000ff"
        android: >

        <Button
            android:layout_
            android:layout_
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:text="Log in" 
            />

        <EditText
            android:layout_
            android:layout_
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:padding="4dp"
            android:hint="password"
            android:inputType="textPassword" >
        </EditText>

        <EditText
            android:id="@+id/editText1"
            android:hint="login"
            android:padding="4dp"
            android:layout_
            android:layout_
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true" ></EditText>
    </RelativeLayout>

</LinearLayout>

更新工作解决方案 我不能在这里粘贴整个xml文件,但结构应该足够了。 基于 Gabe Sechan 的回答。

Layout
   Layout top weight 1
   Layout mid weight 1
   Layout bot weight 1

子布局已设置为:

android:layout_
android:layout_
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 以便在加载活动时键盘不会启动。希望能帮助到你。祝你好运。

【问题讨论】:

【参考方案1】:

他们使用相对布局、adjustResize 和 android:layout_centerVertical 来实现。基本上,他们的主要布局有一个线性布局,其中有 3 个等权重的相对布局。每个都设置为 0dp 高度,因此它们占据屏幕的三分之一。顶部的 RelativeLayout 包含徽标,垂直居中。中间包含登录字段和按钮,一个在另一个顶部垂直居中。底部是版权文本,与底部对齐。最终结果是,当键盘出现时,3 个相对布局被调整大小以占据新屏幕的 1/3。然后它们的元素在新屏幕中居中。

请记住,您需要使用 adjustResize 窗口模式来获得此效果,如果您使用平移,它只会向上移动,并且徽标将滚动偏离中心。

【讨论】:

你能看看我的更新吗?在包含登录字段的 facebook 应用程序部分未调整大小,但顶部和底部元素会调整大小。在我的应用程序中,字段被合并。请帮帮我。我根据您的回答编写了 xml。安卓新手。 在 facebook 布局中,由于底部几乎完全是空的,你可以给它比登录字段部分更小的重量,让它变大而牺牲其他部分。您可以使用 3 个部分的权重来将其放在您想要的位置。我也可能将 EditTexts 和按钮的高度设置为 wrap_content 以节省几个像素。 谢谢,我需要的是解决体重问题。您知道如何以编程方式更改视图/布局的权重吗? 是的 - 您需要将视图 LayoutParams 设置为具有权重集的 LinearLayout.LayoutParams 实例。【参考方案2】:

在 Eclipse 中,转到 File|New|Other,然后在随后的向导中选择 Android Activity,然后在下一页上,从活动列表中选择 LoginActivity。这具有您正在谈论的确切布局,您可以将其用作框架。它使用一个 ScrollView 来实现你想要的效果。

【讨论】:

不确定 Eclipse,但对于 Android Studio 不正确。

以上是关于在 facebook 应用程序中创建登录布局,如 android的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 登录后 (javascript sdk) - 如何在 Spring-Security 中创建用户会话?

在Firebase中创建用户后获取身份提供商令牌

如何在 Angular 中创建像 Facebook 帖子这样的照片网格?

如何在 React 中创建多个布局?

朋友不会被邀请参加 Facebook 中创建的活动

如何使用 facebook sdk 在 ios 中创建 facebook 测试用户