java - 如何在不使用片段的情况下使用 Activity 制作 TabLayout?有可能吗?如果可能的话,我怎么能做到这一点?
问题描述
我是初学者,我为登录和注册 UI 制作了这个布局,但问题是我面临太多问题,所以我决定删除这两个片段并替换为活动。唯一的问题是如何用活动制作这个TabLayout
登录片段
注册片段
我不想要我自己可以制作的布局,但是如何使登录和注册活动从左到右和从右到左滑动?可能吗?我通过使用一个活动来做到这一点,并将其放入两个这样的片段中
注册片段
package com.example.wave;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
public class SignupFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_signup, container, false);
return view;
}
}
登录片段
package com.example.wave;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import com.google.android.material.textfield.TextInputLayout;
public class LoginFragment extends Fragment {
TextInputLayout mobile, password;
Button login;
TextView forget;
float v = 0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_login, container, false);
mobile = view.findViewById(R.id.mobile);
password = view.findViewById(R.id.pass);
login = view.findViewById(R.id.login);
forget = view.findViewById(R.id.forgetpass);
// This is for translation X axis
mobile.setTranslationX(800);
password.setTranslationX(800);
forget.setTranslationX(800);
login.setTranslationX(800);
// This is for alpha animation
mobile.setAlpha(v);
password.setAlpha(v);
forget.setAlpha(v);
login.setAlpha(v);
// This is for animation delay
mobile.animate().translationX(0).alpha(1).setDuration(800).setStartDelay(300).start();
password.animate().translationX(0).alpha(1).setDuration(800).setStartDelay(500).start();
forget.animate().translationX(0).alpha(1).setDuration(800).setStartDelay(500).start();
login.animate().translationX(0).alpha(1).setDuration(800).setStartDelay(700).start();
return view;
}
}
我附加两个片段的AuthenticationActivity
package com.example.wave;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.viewpager2.widget.ViewPager2;
import com.google.android.material.tabs.TabLayout;
public class AuthenticationActivity extends AppCompatActivity {
TabLayout tabLayout;
ViewPager2 pager2;
ViewPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_authentication);
tabLayout = findViewById(R.id.tabLayout);
pager2 = findViewById(R.id.viewPager2);
FragmentManager fm = getSupportFragmentManager();
adapter = new ViewPagerAdapter(fm, getLifecycle());
pager2.setAdapter(adapter);
tabLayout.addTab(tabLayout.newTab().setText("Log In"));
tabLayout.addTab(tabLayout.newTab().setText("Sign Up"));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
pager2.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
pager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
tabLayout.selectTab(tabLayout.getTabAt(position));
}
});
}
}
ViewPagerAdapter
package com.example.wave;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Lifecycle;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import org.jetbrains.annotations.NotNull;
public class ViewPagerAdapter extends FragmentStateAdapter {
public ViewPagerAdapter(@NonNull @NotNull FragmentManager fragmentManager, @NonNull @NotNull Lifecycle lifecycle) {
super(fragmentManager, lifecycle);
}
@NonNull
@NotNull
@Override
public Fragment createFragment(int position) {
switch (position)
{
case 1:
return new SignupFragment();
}
return new LoginFragment();
}
@Override
public int getItemCount() {
return 2;
}
}
解决方案
推荐阅读
- telegram - 如何使用电报 cli 和用户 ID(不是用户名)将用户添加到电报频道?
- string - Powershell,函数在连接字符串(参数)时添加尾随空格
- sql-server - SQL Server 视图和存储过程
- python - 如何提取重复指定列值组合的数据帧的行?
- javascript - React Hooks - 设置最后一个值?
- visual-studio - 在 Visual Studio C# 中生成自定义属性
- javascript - vue-simple-calendar - onClick 后查看日期事件
- sparql - SPARQL 仅返回 IRI/URI 作为结果
- javascript - 为什么我的帖子列表组件没有加载?
- php - 执行代码后显示空白页