在实际项目中经常会遇到在某些手机上特别是大屏幕手机上出现毛边,边界看起来模糊不清的情况。这是因为界面上的图形会因为长宽的变化而产生拉伸,造成图形的失真变形。
站在用户的角度思考问题,与客户深入沟通,找到普安网站设计与普安网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:做网站、成都网站设计、企业官网、英文网站、手机端网站、网站推广、主机域名、网站空间、企业邮箱。业务覆盖普安地区。
这种情况下,我们可以UI设计师多切出几套分辨率的图偶来适配,但是这样会导致apk体积增加,有没有一张图就能解决的好办法呢,android平台下的点9PNG就应运而生了。点9图可以将图片横向和纵向同时进行拉伸,以实现在多分辨率下的完美显示效果。
首先看一下普通图片和点9图片的区别
布局文件如下
实际显示效果图
图中可以看出经过我处理的图片,边角变得不模糊了,虽然不是那么很好看,但这里只是做个例子来说明其作用。
下面来讲讲在android studio中怎么去根据自己实际需求去画这个点9图
先找到图片右键
然后修改图片名称,选择目录,注意必须要放在drawable目录里面,不然引用studio会报错
然后进入点9图编辑界面
最后讲解怎么编辑点9图
只需要在图片边缘鼠标单击即可,一般我们只需要设置左边和上边来调节拉伸区域。
变成黑色表示拉伸的坐标点。图中粉红色的交叉点原本是白色,故而拉伸的区域都在白色点区域。
所以当拉伸时大家就看到了谷歌机器人的外部四个绿色边角区域没有了毛边,实际就是保持其不被拉伸而形成的结果。
L1与T1交叉区域,L2与T2交叉区域,表图片在拉伸的时候只会拉伸所以示只拉伸该区域。
至于右边下边 要是边框是透明色区域则表示这块区域占据空间不被别的内容遮挡,
黑色区域表示可以显示别的内容的区域,比如一个textview放这张图片做背景,如果下面左边一半设置透明色,右边一半设置黑色,那么最后文字只会在黑色区域。
如下图
以上就是点9图的部分介绍。
在TabWidget标签加上
android:layout_alignParentBottom="true"
属性试试。
CSDN博客地址:
一、Android官方推出的百分比布局的使用
1、导入依赖
2、提供了如下的属性
更多请参考: (需要正确上网)
二、Android官方增强版百分比布局的使用——推荐使用
注:在官方的基础上增加了布局PercentLinearLayout,支持百分比设置正方形,未改变官方原有的使用,支持设置字体的百分比,因此更推荐使用
1、导入依赖
2、支持的布局有
3、支持的属性有
4、使用实例
效果图
效果图
效果图
效果好像与直接使用xx%差不多,但是交换过来好像就不一样了
效果图
更多使用请参考:
1.新建一个URI.java用来存放网络请求地址和端口地址
如
public class URI {
public static final String LOGIN = "192.168.2.1/api/login";
}
2.新建界面TestActivity.java
3.编写界面,由于只用于测试用,所以在这只写了TextView,具体需求看自己。
xmlns:app=""
xmlns:tools=""
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TestActivity"
android:id="@+id/tv_one"
android:layout_width="0dp"
android:minHeight="48dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
tools:text="数据"/
android:id="@+id/tv_two"
android:layout_width="0dp"
android:minHeight="48dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
tools:text="数据"/
android:id="@+id/tv_three"
android:layout_width="0dp"
android:minHeight="48dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
tools:text="数据"/
android:id="@+id/tv_fore"
android:layout_width="0dp"
android:minHeight="48dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
tools:text="数据"/
android:id="@+id/tv_five"
android:layout_width="0dp"
android:minHeight="48dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
tools:text="数据" /
效果图如下:
4.编写实体类TestBean
这个根据所给的Json数据来写
5.编写适配器TestAdapter(我这里用的是BaseQuickAdapter万能适配器)
class TestAdapter :BaseQuickAdapter实体类, BaseViewHolder(你要传数据界面) { override fun convert(helper: BaseViewHolder, item: 实体类) {
helper.setText(控件名,item.要放的数据)
.setText(控件名,item.要放的数据)
.setText(控件名,item.要放的数据)
.setText(控件名,item.要放的数据)
.setText(控件名,item.要放的数据)
}
}
6.最主要的一步,编写Activity.java
首先要初始化,由于kotlin不需要初始化控件,所以我们只需要初始化我们的适配器
mAdapter = ManagementAdapter()
然后我们要获取数据(我这里用了一下RxJava的东西)
fun getManagerfee(){
NetWork.getEnquiryDetailsApi().getManagerPriceList(inquiryId).async(this).subscribe({
it.isSuccess.yes {
mAdapter.setNewData(it.data)
}.otherwise {
onRequestFail(it.code, it.message)
}
}
}
7.最后基本上如果需要从上一个界面获取数据,需要从上一个接口带过来一个id的字段,比如我这个从上一个界面带过来的inquiryId,我们就需要写一下object
companion object {
private const val EXTRA_PARAM_ID ="inquiry_id"
fun launch(context: Context, inquiryId: String) {
context.startActivity(Intent(context, ManagePreActivity::class.java).apply {
putExtra(EXTRA_PARAM_ID, inquiryId)
})
}
}