Android学习日志2020-1-10

自定义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保证强硬推拽不变形,即始终固定到特定界面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘻嘻哈哈笑呵呵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值