自定义xml资源文件创建和添加resource标记
首先找到build.gradle(Moudle:app)文件(将项目浏览方式切换为Android点击Gradle Scripts可以快速找到)。
在android下添加内容:
<!--没找到格式代码块,用的bash的-->
sourceSets{
main{
res.srcDirs =
[
此处添加对应作为resource的文件夹或文件,逗号隔开
例如:'src/main/res/layout'
]
}
}
内容添加完后,记得建立对应位置的文件夹,然后在此文件夹下添加一个固定的文件夹,例如创建values文件就要添加values文件夹,每一个自定义文件夹都要添加。一般用values、layout、drawable。注意values文件夹下可创建很多类型文件不受固定名称限制,但是都以resources标签作为起始。
特别地,对于国际化文件,例如values文件来说,直接创建values-zh(国家代码)-rCN(语言代码)文件夹无需添加到配置文件中。
所有要国际化的内容在对应的文件夹中创建对应的国际化内容,不需要对应文件名,但是内容需要唯一对应,最好在values普通文件夹下有一个默认值。
截图:
文件名不需要一一对应,内容最好都有,并且内容至多只能一一对应
给LinearLayout添加边框
为对应内容添加自定义背景可实现添加边框,使用android:background="@drawable/drawableid"设置。
xml文件代码:
<!--没找到格式代码块,用的bash的-->
<?xml version="1.0" encoding="utf-8"?><!--标配-->
<!--shape构建背景-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:color="#000000" android:width="0.1dp"/><!--边框颜色和宽度-->
<solid android:color="#ffffff"/><!--背景颜色-->
<padding android:bottom="2dp"/><!--距底部距离-->
</shape>
其实只要让背景颜色和整个activity或者fragment的颜色不一样就行了,而且会产生一个向内凹的视觉。
截图:
fragment嵌套不显示问题,viewpager中嵌套的viewpager不显示fragment内容
对于标题所示问题,在未使用嵌套时,用的时getSupportFragmentManager,
嵌套时要使用getChildFragmentManager作为FragmentPagerAdapter的参数,查阅网上资料上说,最好将子内容继承FragmentStatePagerAdapter(我没用这个,现在没什么问题)。
tablayout+viewpager嵌套或其它部分原因引起的滑动冲突问题
查阅网上资料,可采用重写viewpager类中的onInterceptTouchEvent方法,返回boolean类型值,为false代表让子组件处理onTouchEvent,即调用子组件onTouchEvent;为true则有父组件调用。
示例代码:
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
//获取起始点横纵坐标,点哪是哪
final float x = event.getX();
final float y = event.getY();
//允许范围,自己设定,就是在此范围内响应子组件,math.abs为绝对值
if(Math.abs(xlast - x) < 10 && Math.abs(ylast - y) > 10)
{
System.out.println(xlast - x);//可注释,测试用
isFatherScrollable = false;//标记位,默认true,标识可不可以调用父组件滑动,直接外边定义一个就行
}
else
{
isFatherScrollable = true;
}
//上一次点击后保留的位置,默认为0
xlast = event.getX();
ylast = event.getY();
//isScrollable返回scrollable,第二个要继承,不然没用
//都为真就是响应父组件,否则子组件,第二个继承的那个必真
return isFatherScrollable && super.onInterceptTouchEvent(event);
}
其它原因,比如说参考上面截图,上面一组tablayout,下面还有一组,但是我不想让下面的那组可以通过滑动切换界面。
代码如下:
private boolean scrollable = true;//标记位
//直接禁用ontouch
//非重写方法,调用此方法可设置值,此方法用于外部调用
public void setScrollAble(boolean scollable)
{
this.scrollable = scrollable;
}
//非重写方法,内部调用,也可以不写,直接用变量
public boolean isScrollable()
{
return scrollable;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//获取宽度和确定position,保证硬划拉的时候不动
scrollTo(getWidth() * getCurrentItem(), 0);
//返回结果,同样也要继承
return isScrollable() && super.onTouchEvent(event);
}
使用scrollto保证强硬推拽不变形,即始终固定到特定界面。