1.在为Button设置android:background="@drawable/main_recordbtn_bg"背景时不生效
解决方法:在res/values/themes.xml 文件中,
parent=“Theme.MaterialComponents.DayNight.DarkActionBar” 修改为
parent=“Theme.MaterialComponents.DayNight.NoActionBar.Bridge” 即可!!
2.使用TabLayout 滑动标签时未生效
先来看一下TabLayout标签的使用
首先需要添加Tablayout的依赖material
然后写页面布局
<?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"
tools:context=".RecordActivity"
android:orientation="vertical"
android:background="@color/grey_f3f3f3">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<ImageView
android:id="@+id/record_iv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ih_error"
android:paddingTop="15dp"
android:onClick="onClick"
android:layout_marginLeft="10dp"/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/record_tabs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
app:tabGravity="center"
app:tabMode="fixed"
app:tabTextColor="@color/grey_7D7D7D"
app:tabSelectedTextColor="@color/black"
app:tabIndicatorColor="@color/black"/>
</RelativeLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/record_vp"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>
</LinearLayout>
页面布局中使用到了TabLayout与ViewPager,我们要让ViewPager随着TabLayout联动
接着写相对应的Java文件
package com.example.bookkeeping;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import android.view.View;
import com.example.bookkeeping.adapter.RecordPageAdapter;
import com.example.bookkeeping.frag_record.IncomeFragment;
import com.example.bookkeeping.frag_record.OutcomeFragment;
import com.google.android.material.tabs.TabLayout;
import java.util.ArrayList;
import java.util.List;
public class RecordActivity extends AppCompatActivity {
TabLayout tabLayout;
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_record);
//查找控件
tabLayout=findViewById(R.id.record_tabs);
viewPager=findViewById(R.id.record_vp);
//2设置ViewPager加载页面
initPager();
}
private void initPager() {
// 初始化ViewPager页面的集合
List<Fragment> fragmentList=new ArrayList<>();
//创建收入和支出页面,放在Fragment中
OutcomeFragment outFrag=new OutcomeFragment();//支出
IncomeFragment inFrag=new IncomeFragment();//收入
fragmentList.add(outFrag);
fragmentList.add(inFrag);
//创建适配器
RecordPageAdapter pageAdapter= new RecordPageAdapter(getSupportFragmentManager(),fragmentList);
//设置适配器对象
viewPager.setAdapter(pageAdapter);
//将TabLayout和ViewPager进行关联
tabLayout.setupWithViewPager(viewPager);
}
//点击事件
public void onClick(View view) {
switch(view.getId()){
case R.id.record_iv_back:
finish();
break;
}
}
}
通过获取控件,初始化ViewPager页面集合,创建页面放入到Fragment中,使每次点击后都是不同的Fragment。里面有一个FragmentList,是通过Adapter添加进入的,具体代码如下:
package com.example.bookkeeping.adapter;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.List;
public class RecordPageAdapter extends FragmentPagerAdapter {
List<Fragment> fragmentList;
String[]titles={"支出","收入"};
public RecordPageAdapter(@NonNull FragmentManager fm, List<Fragment> fragmentList) {
super(fm);
this.fragmentList=fragmentList;
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
}
RecordPageAdapter 继承自FragmentPagerAdapter ,里面需要实现三个方法,注意三个方法的返回值,一定要返回你所创建的FragmentList,同时也要记得重新写getPageTitle方法,返回你上面写的title,不然都是无法显示的
解决方法:我就是没有修改Adapter方法中的返回值导致使用滑动标签时为生效,显示都没显示
3. androidx.appcompat.widget.AppCompatTextView cannot be cast to android.widget.ImageView 报错
**解决:**提示你TextView 不能映射成ImageView,简单的说,就是你xml文件中定义的类型为TextView,在Java文件中进行获取时写成了ImageView类型,由于ID太多而写错的问题,还浪费了好长时间,改一下就行了。