带有固定按钮的片段

Posted

技术标签:

【中文标题】带有固定按钮的片段【英文标题】:fragment with fixed buttons 【发布时间】:2021-10-12 05:58:07 【问题描述】:

我想将(登录/注册)按钮固定在其位置,并且编辑文本位于片段中 我怎样才能做到这一点 ?我已经完成了片段部分,但我无法将(登录/注册)按钮固定在其位置

【问题讨论】:

【参考方案1】:

步骤一

创建包含

的activity_main.xml
    登录和注册文本或按钮 框架布局或任何其他布局作为要被片段替换的容器 提交表单的按钮(登录或注册) 文本视图提及 OR 用于引用 Gmail 和 Facebook 的图像视图或按钮

activity_main.xml 将如下所示。 仅作为示例,您可以根据需要进行自定义

  <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_>
        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="horizontal"
            android:id="@+id/header"
            android:weightSum="2">
            <Button
                android:layout_
                android:layout_
                android:layout_weight="1"
                android:id="@+id/loginBtn"
                android:text="Log In"/>
            <Button
                android:layout_
                android:layout_
                android:layout_weight="1"
                android:id="@+id/signupBtn"
                android:text="Sign Up"/>
        </LinearLayout>
        <FrameLayout
            android:layout_
            android:layout_
            android:id="@+id/container"
            android:layout_below="@id/header"
            android:layout_above="@id/submitBtn"/>
        <Button
            android:layout_
            android:layout_
            android:id="@+id/submitBtn"
            android:text="Log in"
            android:layout_above="@id/ok"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="10dp"/>
        <TextView
            android:layout_
            android:layout_
            android:id="@+id/ok"
            android:text="OK"
            android:textSize="18sp"
            android:layout_above="@id/footer"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="10dp"/>
        <LinearLayout
            android:layout_
            android:layout_
            android:id="@+id/footer"
            android:orientation="horizontal"
            android:layout_alignParentBottom="true"
            android:gravity="center"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="10dp">
            <ImageView
                android:layout_
                android:layout_
                android:id="@+id/google"
                android:background="@color/disable_state_color"
                android:src="your_google_img"
                android:layout_marginRight="5dp"
                />
            <ImageView
                android:layout_
                android:layout_
                android:id="@+id/facebook"
                android:background="@color/disable_state_color"
                android:src="your_facebook_img"
                android:layout_marginLeft="5dp"
    
                />
        </LinearLayout>
    </RelativeLayout>

第二步

现在您必须创建两个 xml,一个用于登录视图 (fragment_login.xml),另一个用于注册视图 (fragment_signup.xml)

fragment_login.xml 看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical">
    <EditText
        android:layout_
        android:layout_
        android:id="@+id/username"
        android:hint="username"/>

    <EditText
    android:layout_
    android:layout_
    android:id="@+id/password"
    android:hint="********"
        android:inputType="textPassword"/>
    <TextView
        android:layout_
        android:layout_
        android:id="@+id/forget_pwd"
        android:layout_gravity="right"
        android:gravity="center"
        android:text="Forget Password?"/>
</LinearLayout>

fragment_signup.xml 看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical">
    <EditText
        android:layout_
        android:layout_
        android:id="@+id/email"
        android:hint="email"
        android:inputType="textEmailAddress"/>
    <EditText
        android:layout_
        android:layout_
        android:id="@+id/username"
        android:hint="username"
        android:inputType="text"/>
    <EditText
    android:layout_
    android:layout_
    android:id="@+id/password"
    android:hint="********"
        android:inputType="textPassword"/>
    <EditText
        android:layout_
        android:layout_
        android:id="@+id/confirm_password"
        android:hint="********"
        android:inputType="textPassword"/>
</LinearLayout>

第三步

在你的 ActivityMain 的 onCreate() 中用 FragmentLogin 替换容器

public class ActivityMain extends AppCompatActivity 
    Button loginBtn,signupBtn;
    FragmentLogin fragmentLogin ;
    FragmentSignUp fragmentSignUp ;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        fragmentLogin = new FragmentLogin();
        fragmentSignUp = new FragmentSignUp ();


        loginBtn= findViewById(R.id.loginBtn);
        signupBtn= findViewById(R.id.signupBtn); 
        
        
       getSupportFragmentManager().beginTransaction().replace(R.id.container,new 
       FragmentLogin(),"Fragment_Login").commit();

     loginBtn.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View v) 
 getSupportFragmentManager().beginTransaction().replace(R.id.container,new 
           FragmentLogin(),"Fragment_Login").commit();
                
            );

    signupBtn.setOnClickListener(new View.OnClickListener() 
                    @Override
                    public void onClick(View v) 
 getSupportFragmentManager().beginTransaction().replace(R.id.container,new 
           FragmentSignUp(),"Fragment_SignUp").commit();
                    
                );
            
         

第四步

创建您的 FragmentLogin 和 FragmentSignUp

片段登录

public class FragmentLogin extends Fragment

    View fragmentView;
    
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 

        fragmentView = inflater.inflate(R.layout.fragment_login, container, false);
       return fragmentView;
        

片段注册

public class FragmentSignUp extends Fragment

    View fragmentView;
    
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 

        fragmentView = inflater.inflate(R.layout.fragment_signup, container, false);
       return fragmentView;
        

希望你能了解实现的基本思路

【讨论】:

非常感谢【参考方案2】:

如果我理解正确,您不希望登录注册按钮被片段替换吗?

在activity中放一个固定按钮,只用片段替换变化的部分。

【讨论】:

以上是关于带有固定按钮的片段的主要内容,如果未能解决你的问题,请参考以下文章

目标 C:以编程方式添加带有约束的 UI 按钮

将 JavaScript 字符串拆分为固定长度的片段

带有空格和固定数字位数的文本字段,如密码文本字段

在固定区域中具有可变内容和控制按钮的表单

c_cpp 加载源图像固定用法(代码片段,不全)

视图高度的AMBIGUOUS布局