第一步 在activity_fragment_main文件中进行写入布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/activity_main" android:orientation="vertical" tools:context=".fragment.FragmentMainActivity"> <androidx.viewpager.widget.ViewPager android:id="@+id/vp_1" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <RadioGroup android:id="@+id/main_rg" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/abc_vector_test" android:orientation="horizontal"> <RadioButton android:id="@+id/main_rb1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:drawableTop="@drawable/wd" android:text="联系人" android:drawablePadding="2dp" android:button="@null" android:gravity="center" android:textStyle="bold" android:textColor="@drawable/wd_zt" /> <RadioButton android:id="@+id/main_rb2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:drawableTop="@drawable/xx" android:text="消息" android:button="@null" android:gravity="center" android:drawablePadding="2dp" android:textStyle="bold" android:textColor="@drawable/xx_zt" /> <RadioButton android:id="@+id/main_rb3" android:text="动态" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" android:gravity="center" android:textStyle="bold" android:drawableTop="@drawable/fx" android:drawablePadding="2dp" android:textColor="@drawable/fx_zt" /> <RadioButton android:id="@+id/main_rb4" android:text="设置" android:gravity="center" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" android:textStyle="bold" android:drawablePadding="2dp" android:drawableTop="@drawable/sz" android:textColor="@drawable/sz_zt" /> </RadioGroup> </LinearLayout>
在联系人按钮下
android:textColor="@drawable/wd_zt"为设置按钮点击之后字体改变的颜色,
android:drawableTop="@drawable/wd"为设置按钮点击之后图片的改变
第二步、在main——>res——> drawable-v24包下
创建第一个按钮点击之后图片的变化,图片自己选择放,这里不在赘述,
android:state_checked="true"时放的是点击变化之后的图片,"false"是未点击时的图片
文件名:wd.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!--点击之后的图片--> <item android:state_checked="true" android:drawable="@mipmap/wdxx"/> <!--未点击的图片--> <item android:state_checked="false" android:drawable="@drawable/contact"/> </selector>
四个按钮图片里的代码除图片名与文件名需要自己设置外其他都一致,这里不再赘述
第三步、在main——>res——> drawable-v24包下
创建第一个文字点击之后颜色改变
文件名:wd_zt.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 定义按钮字体按下时的颜色 --> <item android:color="#94C5FF" android:state_checked="true"/> <!-- 定义按钮字体默认的颜色 --> <item android:color="#aaa"/> </selector>
四个按钮字体里的代码除颜色与文件名需要自己设置外其他都一致,这里不再赘述
第四步、创建Fragment碎片布局
选择一个包文件右击——>New——>Fragment——>Fragment(Blank)
这里创建Fragment Name名为 ContactFragment
package com.example.wdapp.fragment.one; import android.os.Bundle; import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.wdapp.R; public class ContactFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.activity_fragment_contact, container, false); } }
activity_fragment_contact.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".fragment.one.ContactFragment"> <!-- TODO: Update blank fragment layout --> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="11111111111" /> </LinearLayout>
四个按钮也是按照此方法进行创建,这里不再赘述
*第五部、在FragmentMainActivity里编写逻辑 也是最重要的一步
package com.example.wdapp.fragment; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.fragment.app.FragmentTransaction; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.PagerTabStrip; import androidx.viewpager.widget.ViewPager; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.ArrayAdapter; import android.widget.FrameLayout; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; import com.example.wdapp.R; import com.example.wdapp.fragment.animation.AccordionTransformer; import com.example.wdapp.fragment.animation.BackgroundToForegroundTransformer; import com.example.wdapp.fragment.animation.CubeInTransformer; import com.example.wdapp.fragment.animation.CubeOutTransformer; import com.example.wdapp.fragment.animation.CubeTransformer; import com.example.wdapp.fragment.animation.FilpTransformer; import com.example.wdapp.fragment.animation.FlipHorizontalTransformer; import com.example.wdapp.fragment.animation.FlipVerticalTransformer; import com.example.wdapp.fragment.animation.ForegroundToBackgroundTransformer; import com.example.wdapp.fragment.animation.RotateDownPageTransformer; import com.example.wdapp.fragment.animation.RotateDownTransformer; import com.example.wdapp.fragment.animation.RotateUpTransformer; import com.example.wdapp.fragment.animation.ScaleInOutTransformer; import com.example.wdapp.fragment.animation.StackTransformer; import com.example.wdapp.fragment.animation.TabletTransformer; import com.example.wdapp.fragment.animation.ZoomInTransformer; import com.example.wdapp.fragment.animation.ZoomOutSlideTransformer; import com.example.wdapp.fragment.animation.ZoomOutTranformer; import com.example.wdapp.fragment.four.SettingFragment; import com.example.wdapp.fragment.one.ContactFragment; import com.example.wdapp.fragment.three.NewsFragment; import com.example.wdapp.fragment.two.MessageFragment; import java.util.ArrayList; public class FragmentMainActivity extends AppCompatActivity {ViewPager viewPager; private PagerTabStrip pagerTabStrip; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment_main); //页面切换动画 viewPager = findViewById(R.id.vp_1); //获取页面id RadioGroup radioGroup = findViewById(R.id.main_rg);//获取RadioGroup的id ArrayList<Fragment> arrayList = new ArrayList<>(); arrayList.add(new ContactFragment()); arrayList.add(new MessageFragment()); arrayList.add(new NewsFragment()); arrayList.add(new SettingFragment()); //viewPager的适配器 获取 viewPager.setAdapter(new FragmentStatePagerAdapter(getSupportFragmentManager()) { @NonNull @Override public Fragment getItem(int position) { return arrayList.get(position); } @Override public int getCount() { return arrayList.size(); } }); //viewPager的监听,todo 滑动界面带动按钮 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position) { case 0: radioGroup.check(R.id.main_rb1); break; case 1: radioGroup.check(R.id.main_rb2); break; case 2: radioGroup.check(R.id.main_rb3); break; case 3: radioGroup.check(R.id.main_rb4); break; } } @Override public void onPageScrollStateChanged(int state) { } }); //按钮的监听,todo 点击按钮获取页面 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener({ @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { switch (i) { case R.id.main_rb1: viewPager.setCurrentItem(0, true); break; case R.id.main_rb2: viewPager.setCurrentItem(1, true); break; case R.id.main_rb3: viewPager.setCurrentItem(2, true); break; case R.id.main_rb4: viewPager.setCurrentItem(3, true); break; } } }); } }
到这里一个Fragment碎片就算是完成了!