安卓做项目时用到的一些小技巧:
一、导航栏的实现(BottomNavigationView):1.导包:implementation 'com.google.android.material:material:1.0.0'2.使用:<com.google.android.material.bottomnavigation.BottomNavigationViewandroid:id="@+id/main_navigatio
一、导航栏的实现(BottomNavigationView):
1.导包:
implementation 'com.google.android.material:material:1.0.0'
2.使用:
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/main_navigation_bar"
android:layout_width="match_parent"
android:layout_height="49dp"
android:layout_alignParentBottom="true"
android:background="@color/white"
app:itemIconTint="@drawable/navigation_bar_color"
app:itemTextColor="@drawable/navigation_bar_color"
app:menu="@menu/my_navigation_items" />
控件分析:
app:itemTextColor 指的是导航栏文字的颜色
app:itemIconTint 指的是导航栏中图片的颜色
app:iteamBackground 指的是底部导航栏的背景颜色,默认是主题的颜色
app:menu 指的是布局(文字和图片都写在这个里面)
**注意:**这个控件里面app:menu 需要自己创建一个菜单(menu文件)来实现导航栏的雏形
3.创建一个menu文件:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/home"
android:icon="@mipmap/home_normal"
android:title="@string/text_home" />
<!--精选-->
<item
android:id="@+id/selected"
android:icon="@mipmap/select_normal"
android:title="@string/text_selected" />
<!--特惠或者红包-->
<item
android:id="@+id/red_packet"
android:icon="@mipmap/red_packet_normal"
android:title="@string/text_red_packet" />
<!--搜索-->
<item
android:id="@+id/search"
android:icon="@mipmap/search_normal"
android:title="@string/text_search" />
</menu>
要想让导航栏触碰和弹起有动画效果,还需在drawable文件下创建一个xml文件,详情见下:
4.导航栏明暗效果变动;
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/colorPrimary"
android:state_checked="true" />
<item android:color="@color/colorGrey" />
</selector>
在BottomNavigationView中通过app:itemTextColor="@drawable/navigation_bar_color"实现明暗变化
二、实现导航栏(RadioGroup+RadioButton):
1.在主活动的xml文件中添加如下代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:sob="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#EFEEEE"
android:orientation="vertical">
<RadioGroup
android:id="@+id/test_navigation_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<RadioButton
android:id="@+id/test_home"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:checked="true"
android:drawableTop="@drawable/selector_navigation_home"
android:gravity="center"
android:text="首页"
android:textColor="@drawable/navigation_bar_color" />
<RadioButton
android:id="@+id/test_selected"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawableTop="@drawable/selector_navigation_selected"
android:gravity="center"
android:text="精选"
android:textColor="@drawable/navigation_bar_color" />
<RadioButton
android:id="@+id/test_red_packet"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawableTop="@drawable/selector_navigation_red_packet"
android:gravity="center"
android:text="特惠"
android:textColor="@drawable/navigation_bar_color" />
<RadioButton
android:id="@+id/test_search"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawableTop="@drawable/selector_navigation_search"
android:gravity="center"
android:text="搜索"
android:textColor="@drawable/navigation_bar_color" />
</RadioGroup>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_above="@id/test_navigation_bar"
android:layout_marginBottom="10dp"
android:background="@color/gray" />
</RelativeLayout>
2.在主活动.java下添加代码:
public class TestActivity extends Activity {
@BindView(R.id.test_navigation_bar)
public RadioGroup navigationBar;
@BindView(R.id.test_flow_text)
public TextFlowLayout flowText;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ButterKnife.bind(this);
initListener();
}
public void showToast(View view) {
//Toast.makeText(this,"测试...",Toast.LENGTH_SHORT).show();
ToastUtil.showToast("测试....");
}
private void initListener() {
navigationBar.setOnCheckedChangeListener((group,checkedId) -> {
// LogUtils.d(TestActivity.class,"checkedId -- > " + checkedId);
switch(checkedId) {
case R.id.test_home:
LogUtils.d(TestActivity.class,"切换到首页");
break;
case R.id.test_selected:
LogUtils.d(TestActivity.class,"切换到精选页面");
break;
case R.id.test_search:
LogUtils.d(TestActivity.class,"切换到搜索页面");
break;
case R.id.test_red_packet:
LogUtils.d(TestActivity.class,"切换到特惠");
break;
}
});
}
}
给RadioGroup和RadioButton添加点击事件,这就是使用RadioGroup实现导航栏的大体框架。
三、Fragment 的统一管理
前言:我们平常使用fragment时,一般都是在 public View onCreateView()方法中使用inflater.inflate(R.layout.activity_myfragment,container,false)来绑定布局。
实例如下:
public class Myfragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//第七行代码是用来加载布局的主要代码
View view = inflater.inflate(R.layout.activity_myfragment,container,false);
return view;
}
}
这其实很麻烦,一个APP不可能只有一个fragment,而且这样也不好维护,万一绑定的布局需要更改,fragment里面这个方法就要全盘修改。所以怎么办呢?
创建一个BaseFragment基类,里面创建方法,把原本fragment中需要频繁使用的一些方法封装进去,再使得fragment继承基类,这样就会好很多了
1.创建基类BaseFragment
public abstract class BaseFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return loadRootView(inflater,container,savedInstanceState);
}
protected View loadRootView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
int resID = getRootViewResID();
return inflater.inflate(resID, container, false);
}
protected abstract int getRootViewResID();
}
2.使得创建的fragment继承这个基类
public class Myfragment extends BaseFragment {
@Override
protected int getRootViewResID() {
return R.layout.fragment_search;
}
}
这样就可以了,你会发现,在fragment中绑定布局,只需要返回一个布局就可以了。比起前面冗长的代码,方便了不少。
更多推荐
所有评论(0)