今天呢,想要讲解一下关于安卓手机界面的适配问题该如何去解决和避免。现在市面上面的安卓机各种各样的界面,但是界面还是有大部分的主流机型。现在很多的菜鸟们其实没有感受到真正的如何去适配界面,和如何去解决这个问题。那么今天我就大概写一下关于这一方面的思路。其实呢,要完全解决适配问题其实很难的。不仅仅我们要对一个这些布局的理解。比如Relayout这个布局,linelayout这个布局这些布局进行一个大概的了解。这是必须的。比如对于Relayout这个布局而言是一个使用十分频繁的一个布局问题。但是这个布局却有局限性,它没办法做到百分百适配。也是网络上面一直说的安卓手机的面碎片化该怎么处理。比如这次新公司的一个项目。里面的碎片非常严重,可能只是适配几款特定的机型。但是对于现在市面上的安卓机来说主流是华为手机,三星,步步高智能机例如ViVo以及OPPO手机。那么相对于苹果机而言,苹果机的机型是相对比较少的,那么在苹果机的适配就会相对简单一点。说这么多,其实碎片化的引起的原因还是因为Relayout布局的问题。比如你设置一个控件距离左边10dp,那么假设你是在780*1080的屏幕上面设置的。那么你在比如ipa上面去再看可能就会造成很大问题。再比如,你在relayout上面设置好了,8个空格的控件,那么有可能 会出现好几种情况,比如界面的距离不够,或者界面的距离过长。那么这个时候就应该想办法去适配。那么这个时候使用什么方式比较适合呢?当然了我们也可以使用Relayout这个布局。但是里面的控件使用Gridview这个控件进行分装。 其实我们
这个时候就可以想到一个问题,就是这个控件可以做到按比例划分界面。虽然会麻烦一点,但是这个方法将会改变很多的问题。其实很多布局不能说全部不适用Relayout这个布局。有些布局我们可以相对简单的布局,也不会影响到界面,这些就靠自己的经验去判断理解。
那么在讲述一个linelayout这个布局。其实这个布局也非常实用,但是也非常的不实用。为什么这么说呢。这个布局其实呢,使用上面可能会麻烦,但是可以很好的解决适配问题。
但是这个布局很难在复杂布局上面进行布局。不是不能哦~只是很麻烦。下一篇博客会写关于这一些为什么这个复杂不好。
其实写了这么一些,其实主要要写一个理念。关于代码的理解。以及布局的理解。而不是简简单单的“布局”有些布局需要在代码里面进行设置。
-
安卓界面适配
2017-10-25 11:39:27开发的时候每次都要做适配的图片。有时实在是记不住drawable-h,l,m,xh,xxh这几种的最佳分辨率,所以在此记录下,以免每次去查找。先来说下一下几方面: 单位 多种屏幕分辨率规格 icon图标尺寸 操作栏图标 小图标 1:...开发的时候每次都要做适配的图片。有时实在是记不住drawable-h,l,m,xh,xxh这几种的最佳分辨率,所以在此记录下,以免每次去查找。
先来说下一下几方面:
- 单位
- 多种屏幕分辨率规格
- icon图标尺寸
- 操作栏图标
- 小图标
1:单位
- Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托罗拉milestone手机是3.7英寸
-Aspect Ratio(宽高比率) 指的是实际的物理尺寸宽高比率,分为long和nolong Milestone是16:9,属于long
-Resolution(分辨率) 和电脑的分辨率概念一样,指手机屏幕纵、横方向像素个数 Milestone是854*480
-DPI(dot per inch) 每英寸像素数,如120dpi,160dpi等,假设QVGA(320*240)分辨率的
屏幕物理尺寸是(2英寸*1.5英寸),dpi=160 可以反映屏幕的清晰度,用于缩放UI的-Density(密度) 屏幕里像素值浓度,resolution/Screen size可以反映出手机密度
Density-independent pixel (dip) 指的是逻辑密度计算单位,dip和具体像素值的对应公式是dip/pixel=dpi值/1602:多种屏幕分辨率规格
- ldpi 0.75倍(1dp=0.75px) (120dpi) 240*320px
- mdpi 1倍(1dp=1px) (160dpi) 320*480px
- hdpi 1.5倍(1dp=1.5px) (240dpi) 480*800px
- xhdpi 2倍(1dp=2px) (320dpi) 720*1280px
- xxhdpi 3倍(1dp=3px) (480dpi) 1080*1920px
- xxxhdpi 4倍(120dpi)
3:icon图标尺寸
- mdpi 320*480 48*48px
- hdpi 480*800 72*72px
- xhdpi 720*1280 96*96px
4:操作栏图标
操作栏图标是app中用的最频繁的图标,一般大小为:32*32dp
- 480*480 ppi=240 图标大小 dp:24 px:36 切图大小 dp:32 px:48
- 720*1280 ppi=320 图标大小 dp:24 px:48切图大小 dp:32 px:64
5:小图标
特定状态下使用的图标。一般大小为:16*16dp
- 480*480 ppi=240 图标大小 dp:12 px:18 切图大小 dp:16 px:24
- 720*1280 ppi=320 图标大小 dp:16 px:24 切图大小 dp:16 px:32
-
如何适配安卓界面
2018-06-22 20:32:15在开发安卓的时候,很多时候要适配的图片,然而最佳分辨率却总是忘记。所以这里进行总结下。 先来说下一下几方面: 单位 多种屏幕分辨率规格 icon图标尺寸 操作栏图标 小图标 1:单位 Screen size...在开发安卓的时候,很多时候要适配的图片,然而最佳分辨率却总是忘记。所以这里进行总结下。
先来说下一下几方面:
单位
多种屏幕分辨率规格
icon图标尺寸
操作栏图标
小图标
1:单位
Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托罗拉milestone手机是3.7英寸
-Aspect Ratio(宽高比率) 指的是实际的物理尺寸宽高比率,分为long和nolong Milestone是16:9,属于long-Resolution(分辨率) 和电脑的分辨率概念一样,指手机屏幕纵、横方向像素个数 Milestone是854*480
-DPI(dot per inch) 每英寸像素数,如120dpi,160dpi等,假设QVGA(320*240)分辨率的
屏幕物理尺寸是(2英寸*1.5英寸),dpi=160 可以反映屏幕的清晰度,用于缩放UI的-Density(密度) 屏幕里像素值浓度,resolution/Screen size可以反映出手机密度
Density-independent pixel (dip) 指的是逻辑密度计算单位,dip和具体像素值的对应公式是dip/pixel=dpi值/1602:多种屏幕分辨率规格
ldpi 0.75倍(1dp=0.75px) (120dpi) 240*320px
mdpi 1倍(1dp=1px) (160dpi) 320*480px
hdpi 1.5倍(1dp=1.5px) (240dpi) 480*800px
xhdpi 2倍(1dp=2px) (320dpi) 720*1280px
xxhdpi 3倍(1dp=3px) (480dpi) 1080*1920px
xxxhdpi 4倍(120dpi)
3:icon图标尺寸mdpi 320*480 48*48px
hdpi 480*800 72*72px
xhdpi 720*1280 96*96px
4:操作栏图标操作栏图标是app中用的最频繁的图标,一般大小为:32*32dp
480*480 ppi=240 图标大小 dp:24 px:36 切图大小 dp:32 px:48
720*1280 ppi=320 图标大小 dp:24 px:48切图大小 dp:32 px:645:小图标
特定状态下使用的图标。一般大小为:16*16dp
480*480 ppi=240 图标大小 dp:12 px:18 切图大小 dp:16 px:24
720*1280 ppi=320 图标大小 dp:16 px:24 切图大小 dp:16 px:32这样以后就可以方便的直接看这篇博客了。
-
安卓基础之界面适配问题——FOX出品
2019-09-28 18:20:04今天呢,想要讲解一下关于安卓手机界面的适配问题该如何去解决和避免。现在市面上面的安卓机各种各样的界面,但是界面还是有大部分的主流机型。现在很多的菜鸟们其实没有感受到真正的如何去适配界面,和如何去解决这...转载于:https://www.cnblogs.com/Foxwei/p/5639488.html
-
Android 安卓UI界面自适配
2018-11-01 12:22:06安卓机器有各种尺寸,UI界面逐个适配比较麻烦。 UI界面自动适配 示例: 示例完整源码:AndroidAutofit源码.zip 适配函数:AutoSize(View view, int w, int h, int DesignW, int DesignH) package ...安卓机器有各种尺寸,UI界面逐个适配比较麻烦。
UI界面自动适配 示例:
示例完整源码:AndroidAutofit源码.zip
适配函数:AutoSize(View view, int w, int h, int DesignW, int DesignH)
package sci.demo.androidautofit; import sci.tool.ActivityComponent; import android.os.Bundle; import android.widget.RelativeLayout; /** MsgPage.java:自适应尺寸信息显示界面示例 ----- 2018-11-1 上午10:07:54 scimence */ public class MsgPage extends ActivityComponent { /** 设置界面显示 */ @Override public void Init(Bundle savedInstanceState) { this.setContentView("autofit_msg_page"); RelativeLayout lPic = RelativeLayout("auto_msg_page_bg"); // 背景图布局Layout setAutofitBackground(lPic, "autofit_msg_pic"); // 为view添加自适应尺寸的图像 setAutofitBackground(RelativeLayout("autofit_msg_page_btn"), "autofit_msg_wait"); // 为按钮添加自适应尺寸的图像 } /** 设置View点击响应逻辑 */ @Override public void Click(String viewId) { if (viewId.equals("auto_msg_page_bg") || viewId.equals("autofit_msg_page_btn")) // 点击了按钮或者背景图时,关闭界面 { this.finish(); } } }
package sci.tool; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.ToggleButton; /** Componet.java: 创建Componet后可按控件字符串名称进行检索调用 ----- 2018-6-7 上午11:00:03 scimence */ public abstract class ActivityComponent extends Activity { /** 显示当前页面 */ public static void Show(Context context, Class<?> cls) { Intent intent = new Intent(context, cls); // 新的支付调用逻辑 // intent.putExtra("appId", PackageName); // intent.putExtra("uid", ClientId); context.startActivity(intent); } /** 根据资源类型、名称,获取资源id */ public static int getId(Context context, String name, String defType) { return context.getResources().getIdentifier(name, defType, context.getPackageName()); } /** 根据资源id,获取资源名称 club.scimence.www.app_second:id/thumbsup_tittle_bg */ public String getResourceName(int resid) { if (resid == -1) return ""; return context.getResources().getResourceName(resid); } /** 获取View对应的id字符串不含包名前缀,如:thumbsup_tittle_bg */ public String getViewId(View view) { int resId = view.getId(); String pageResName = getResourceName(resId); // if(pageResName.startsWith("club.scimence")) pageResName = pageResName + ""; String packagePerfix = context.getPackageName() + ":id/"; String Id = ""; if (pageResName.startsWith(packagePerfix)) Id = pageResName.substring(packagePerfix.length()); return Id; } /** 根据资源名称,获取Drawable */ @SuppressWarnings("deprecation") public static Drawable getDrawable(Context context, String drawableName) { int id = getId(context, drawableName, "drawable"); // Drawable pic = context.getResources().getDrawable(id); // 从Resources直接获取图像尺寸会被修改 InputStream in = context.getResources().openRawResource(id); // 直接解析未处理过的图像资源保持原有尺寸 Bitmap bitmap = BitmapFactory.decodeStream(in); BitmapDrawable pic = new BitmapDrawable(bitmap); return pic; } Activity context; OnClickListener clickListener; HashMap<String, View> Views = new HashMap<String, View>(); protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = this; Init(savedInstanceState); setClickAble(); } /** 设置页面布局layout文件名称(不含后缀) */ public void setContentView(String layoutName) { int layoutId = ActivityComponent.getId(this, layoutName, "layout"); // 获取页面布局id setContentView(layoutId); // 设置布局 } /** 初始化子类界面 */ public abstract void Init(Bundle savedInstanceState); /** 为所有设置android:id="@+id/**"属性的View,添加点击处理逻辑对象 */ public void setClickAble() { // 点击响应处理逻辑 clickListener = new OnClickListener() { @Override public void onClick(View v) { // String key = getViewId(v); // Click(key); // 从已存在的控件中进行检索 for (String key : Views.keySet()) { if (Views.get(key) == v) { // if (listener0 != null) listener0.Click(key); Click(key); } } } }; // 设置可点击的按钮 List<View> list = Childs(this); for (View V : list) { String key = getViewId(V); // 获取View的Id名称 if (!key.equals("")) { // 设置了android:id属性的View,为其添加点击响应 if (!Views.containsKey(key)) Views.put(key, V); // 记录View的Id属性 V.setOnClickListener(clickListener); } } } /** 记录Id对应控件 */ public void AddView(String... Id) { for (String id : Id) { if (!id.equals("") && !Views.containsKey(id)) { try { View view = context.findViewById(getId(context, id, "id")); Views.put(id, view); view.setOnClickListener(clickListener); } catch (Exception ex) { ex.printStackTrace(); } } } } /** 获取Id对应控件 */ public View GetView(String Id) { if (!Views.containsKey(Id)) AddView(Id); return Views.get(Id); } public TextView TextView(String Id) { return (TextView) GetView(Id); } public EditText EditText(String Id) { return (EditText) GetView(Id); } public Button Button(String Id) { return (Button) GetView(Id); } public RadioButton RadioButton(String Id) { return (RadioButton) GetView(Id); } public LinearLayout LinearLayout(String Id) { return (LinearLayout) GetView(Id); } public RelativeLayout RelativeLayout(String Id) { return (RelativeLayout) GetView(Id); } public ImageView ImageView(String Id) { return (ImageView) GetView(Id); } public ToggleButton ToggleButton(String Id) { return (ToggleButton) GetView(Id); } // /** View控件点击回调处理逻辑 */ // public abstract static interface ClickListener // { // public abstract void Click(String viewId); // } // // public ClickListener listener = new ClickListener() // { // @Override // public void Click(String viewId) // { // if (viewId.equals("thumbsup_close")) // 关闭界面按钮 // { // // } // else if (viewId.equals("ltpay_text_unuseable")) // { // // } // } // }; /** 子类继承自此实现点击响应 */ public abstract void Click(String viewId); // ----------------- /** 获取 activity中的所有view */ public static List<View> Childs(Activity act) { View activityRoot = act.getWindow().getDecorView(); List<View> list = Childs(activityRoot, false); return list; } /** 获取当前View的所有子view */ public static List<View> Childs(View view, boolean ContainsThis) { List<View> viewList = new ArrayList<View>(); if (!viewList.contains(view)) viewList.add(view); if (view instanceof ViewGroup) { ViewGroup group = (ViewGroup) view; for (int i = 0; i < group.getChildCount(); i++) { View child = group.getChildAt(i); if (!viewList.contains(child)) viewList.add(child); // 添加child的子节点 List<View> subList = Childs(child, true); for (View v : subList) { if (!viewList.contains(v)) viewList.addAll(subList); } } } if (!ContainsThis) viewList.remove(view); return viewList; } // -------------- // View尺寸自动适配 // 图像资源应与设计宽高匹配 public static int SCREEN_DESIGN_WIDTH = 720; // 设计界面时,界面整体宽度 public static int SCREEN_DESIGN_HEIGHT = 1280; // 设计界面时,界面整体高度 /** 将View以Drawable相对于 DesignW,DesignH的比例显示 */ public static void AutoSize(View view, Drawable drawable, int DesignW, int DesignH) { Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap(); int w = bitmap.getWidth(); int h = bitmap.getHeight(); AutoSize(view, w, h, DesignW, DesignH); } /** 将View以 w,h 相对于 DesignW,DesignH的比例显示。 * * 适配原理:1、先计算宽高在设计屏幕中的尺寸比例值; * 2、取占比值较大的宽度比例值,或占比值较大的高度比例值,为缩放比例值。 * 3、按比例值缩放图像尺寸至待适配屏幕的最适尺寸 * */ public static void AutoSize(View view, int w, int h, int DesignW, int DesignH) { Context context = view.getContext(); DisplayMetrics dm = context.getResources().getDisplayMetrics(); int screenWidth = dm.widthPixels; int screenHeight = dm.heightPixels; boolean portrait = (screenHeight > screenWidth); // 先计算宽高在设计屏幕中的尺寸比例值; float skW = w / (float) (portrait ? DesignW : DesignH); float skH = h / (float) (portrait ? DesignH : DesignW); // float sk = skW > skH ? skW : skH; // 以宽高较大的比例值进行尺寸适配 // 生成相对于屏幕的尺寸,以宽高较大比例值充满屏幕 int width = w, height = h; if (skW >= skH) // 宽度比例值大于高度比例值时,已宽度比例值为基准 { width = (int) (skW * screenWidth); // 按比例值,缩放至屏幕对应尺寸 height = (int) (width * h / w); // 按原图像宽高比例,获取高度尺寸,图像不会拉伸变形 } else // 高度比例值大于宽度比例值时,已高度比例值为基准 { height = (int) (skH * screenHeight); width = (int) (height * w / h); } // 设置显示尺寸 ViewGroup.LayoutParams params = view.getLayoutParams(); // RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width, height); params.width = width; params.height = height; view.setLayoutParams(params); } /** 为viewt添加自动适配尺寸的背景图drawableName */ public static void setAutofitBackground(View view, String drawableName) { Drawable drawablePic = getDrawable(view.getContext(), drawableName); // 从context获取drawableName对应的图像 view.setBackground(drawablePic); // 为view添加背景图像 AutoSize(view, drawablePic, SCREEN_DESIGN_WIDTH, SCREEN_DESIGN_HEIGHT); // 为view自动适配尺寸 } // -------------- }
-
安卓适配详解
2018-01-01 01:41:48本文将详细介绍安卓界面适配过程,后期将会整理一些安卓性能,控件等方面在不同的手机和系统版本上的适配流程,希望对大家开发安卓有所帮助,由于网上很多关于一些dp,sp,px的概念资料,所以本文不进 -
安卓语言适配
2017-08-01 17:31:12最近接触到了语言适配的需求,所以分享个简单的demo介绍一下流程 demo示意: 流程: 1.新建不同的values...2.新建BaseActivity,所有涉及语言适配的Activity继承此基类(其他类型界面同理) public class BaseActivi -
安卓屏幕适配笔记
2018-07-14 22:14:58密度=尺寸/分辨率,如果密度都一样了就不存在适配的问题了)目前的主流的就是720*1280 1920x1080 5英寸或者5.5英寸的智能安卓手机屏幕适配问题的本质使得“布局”、“布局组件”、“图片资源”、“用户界面流程”... -
安卓屏幕适配方案
2019-10-28 10:16:08屏幕适配方案 ...前言 虽然去年写的一篇文章【一种非常好用的Android屏幕适配】就包含字体大小适配...有这样一个需求,界面上需要显示一个标题文本,但是该标题的文案长度是不固定的,要求标题的文案全部显示出来,不能... -
h5 安卓 键盘弹起界面适配 修改webview高度
2018-05-23 22:33:19相信大家在开发移动端h5的时候,肯定会遇到类似下面这种需求: 那对于这种页面的布局来说就很简单了,整个上下排版,然后最...但是在安卓真机上去看到这样的现象: 第一感觉就是不美观,那么该如何解决这个... -
安卓布局适配的另一种姿势
2016-11-24 12:56:59一:安卓布局适配一直都是安卓开发者比较头痛的问题,我们不仅需要考虑代码的质量,同时也需要面对数千品种的手机型号而考虑界面适配的工作;Android屏幕适配全攻略(最权威的官方适配指导) ... -
安卓屏幕适配详解
2014-11-26 13:42:18不少设计师和工程师都被安卓设备纷繁的屏幕搞得晕头转向,我既做UI设计,也做过一点安卓界面布局,刚好对这块内容比较熟悉,也曾在公司内部做过相关的讲座,在此,我将此部分知识重新梳理出来分享给大家!... -
移动端苹果安卓卓适配
2019-09-19 17:10:56【问题1】iphone页面会自动把数字当成电话号码点击后自动跳到电话拨号界面 <meta name="format-detection" content="telephone=no" /> 【问题2】微信浏览器自动调整页面字体大小 方案*禁止微信浏览器调整页面... -
浅谈安卓屏幕适配方案
2017-02-16 10:36:20用户界面流程匹配不同屏幕尺寸 布局适配:使用相对布局,禁止用绝对布局;(相对布局的子控件使用相对位置方式排列,因为控件之间位置是相对位置,所以屏幕大小改变,控件之前的相对位置不会改变,相对浅谈布局更... -
安卓屏幕适配的问题菜鸟求助
2015-06-12 08:07:21菜鸟提问 应用程序主界面 BUTTON等组件的屏幕适配 不用解释图片的问题 -
安卓原生UI适配
2020-11-19 20:19:58本人是做安卓端SDK开发的,之前比较少接触到原生界面UI方面的开发,最近有个需求涉及到,在这里记一下,做原生UI需要留意的细节吧! 屏幕单位知识点的基础 dp是具有伸缩性的,相对px来说是更好的选择,这里面有个... -
移动端安卓适配
2019-09-19 11:46:12• 常见苹果适配问题: • 【问题1】:iPhone页面会自动把数字当成电话号码,点击后自动跳到电话拨号界面 • 方案: <meta name="format-detection" content="telephone=no" /> • 常见苹果适配问题: • ... -
安卓图片适配之.9图片绘制作用详解
2017-01-18 14:09:39当我们使用图片做背景,智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向,在界面改变方向后,界面上的图形会因为长宽的变化而产生拉伸,造成图形的失真变形... -
移动端苹果安卓适配
2019-09-19 16:31:44【问题1】:iPhone页面会自动把数字当成电话号码,点击后自动跳到电话拨号界面 方案: meta元标签常见苹果适配问题 【问题2】微信浏览器自动调整页面字体大小 方案:禁止微信浏览器调整页面字体大小 【问题3】用户... -
安卓适配安卓9.0手机颜色变浅的问题
2020-03-05 16:55:44最近遇到一个手机适配问题,就是同样的一个app运行在安卓9.0手机上的显示和安卓其他设备上的颜色比较浅。 因为项目是通过TextureView来绘制界面图像的,所以我只能先去了解这个类相关的Api,试图通过更改Windows的... -
安卓和ios的ui设计区别_安卓界面设计与iPhone界面设计区别在哪里?
2021-01-17 13:27:37据美国科技媒体最新报道,谷歌将推出一个新的设计...起码对于搞安卓界面设计和安卓开发的小伙伴们来说,是一个无比的好消息。起码以后不用为了适配安卓的分辨率而烦恼,只需要做好一套标准的界面设计就行。前提是按... -
Unity3d UGUI 界面适配(UI自适应) 三种适配方式
2018-09-03 20:53:42对于界面的适配分Android和IOS两种系统处理。 对于IOS设备,由于数量有限,只要做到 960x640 1024x769 1136x640 (当时还没有iphone6呢) 三种适配即可,所以我们对这三种屏幕做了三种不同的界面配置文件。 对于... -
Unity3d UGUI 界面适配 实例解析 三种适配方式
2016-09-09 13:58:00之前做游戏都是用公司自己的引擎,对于界面的适配分Android和IOS两种系统处理。 对于IOS设备,由于数量有限,只要做到 960x640 1024x769 1136x640 (当时还没有iphone6呢) 三种适配即可,所以我们对这三种屏幕做了三... -
安卓刘海屏适配
2019-03-20 10:11:091.允许全屏界面内容显示到刘海区域配置: <!--允许绘制到oppo、vivo刘海屏机型的刘海区域--> <meta-data android:name="android.max_aspect" android:value="2.2"/> <!--允许绘制到华为刘海屏机型的... -
Unity3D UGUI学习笔记之界面适配的三种方式
2017-03-28 17:34:59所以在做界面适配时需要将这些条件都考虑进去,为了能帮到大家提升开发效率,下面就给大家介绍了三种界面适配的方式,想学的可以看一看。 Unity4.6新版UGUI,提供了三种基本的界面适配方案。 首先添加一... -
安卓输入键盘适配方案
2018-03-14 20:29:47我们是不是可以不用系统的键盘适配,自己做适配。我们只需要监听一下键盘的高度,在界面根节点添加ScroolView然后滚动内容不是就可以解决这个问题了先设置键盘兼容模式android:windowSoftInputMode="... -
安卓复习提纲
2016-02-17 18:43:42基础部分 安卓中四大组件(4种)。 ...安卓中存储方式(5种)。...安卓界面适配。 安卓中多线程 安卓中图片处理。 安卓中网络通信。 安卓应用优化。 高级部分 安卓中NDK开发。 安卓中 SO文件。 Framework Linux 内核。
-
日志:2021_3_4 tf.nn.embedding_lookup
-
C和C++课程
-
MySQL 管理利器 mysql-utilities
-
linux使用命令关机
-
《文件和目录操作命令》
<2.> -
UL 1180:2017 完全充气的娱乐式个人浮选装置(如救生圈) - 完整英文版(110页)
-
ff
-
linux学习之用户与用户组(6)
-
less计算中除法不生效的问题解决
-
马原期末知识考点小结pdf
-
Java Math常用方法
-
阿里Redis神级手册,从基础到源码,从头到尾没有一句废话
-
转行做IT-第15章 Collection、泛型、Iterator
-
故障处理-用户无法获取IP地址.pdf
-
手机通讯录生成器
-
sscom串口助手.zip
-
OLED显示屏简单介绍
-
郑州大学901普通物理(一)历年考研真题汇编
-
MySQL 数据类型和运算符
-
WebService 和 Web Api 的区别