当前位置:首页 » 安卓系统 » android做界面

android做界面

发布时间: 2022-05-27 01:58:35

㈠ Android 界面排版

Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局).
一、FrameLayout
这个布局可以看成是墙脚堆东西,有一个四方的矩形的左上角墙脚,我们放了第一个东西,要再放一个,那就在放在原来放的位置的上面,这样依次的放,会盖住原来的东西。这个布局比较简单,也只能放一点比较简单的东西。

二、LinearLayout

线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。
linearLayout中有一个重要的属性 android:layout_weight="1",这个weight在垂直布局时,代表行距;水平的时候代表列宽;weight值越大就越大。

三、AbsoluteLayout

绝对布局犹如div指定了absolute属性,用X,Y坐标来指定元素的位置android:layout_x="20px" android:layout_y="12px" 这种布局方式也比较简单,但是在垂直随便切换时,往往会出问题,而且多个元素的时候,计算比较麻烦。 AbsoluteLayout 可以让子元素指定准确的x/y坐标值,并显示在屏幕上。AbsoluteLayout 没有页边框,允许元素之间互相重叠(尽管不推荐)。他是绝对坐标,所以在实际中不提倡使用。
相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:
相对于某一个元素
// 相对于给定ID控件
android:layout_above 将该控件的底部置于给定ID的控件之上;
android:layout_below 将该控件的底部置于给定ID的控件之下;
android:layout_toLeftOf 将该控件的右边缘与给定ID的控件左边缘对齐;
android:layout_toRightOf 将该控件的左边缘与给定ID的控件右边缘对齐;

android:layout_alignBaseline 将该控件的baseline与给定ID的baseline对齐;
android:layout_alignTop 将该控件的顶部边缘与给定ID的顶部边缘对齐;
android:layout_alignBottom 将该控件的底部边缘与给定ID的底部边缘对齐;
android:layout_alignLeft 将该控件的左边缘与给定ID的左边缘对齐;
android:layout_alignRight 将该控件的右边缘与给定ID的右边缘对齐;

// 相对于父组件
android:layout_alignParentTop 如果为true,将该控件的顶部与其父控件的顶部对齐;
android:layout_alignParentBottom 如果为true,将该控件的底部与其父控件的底部对齐;
android:layout_alignParentLeft 如果为true,将该控件的左部与其父控件的左部对齐;
android:layout_alignParentRight 如果为true,将该控件的右部与其父控件的右部对齐;

// 居中
android:layout_centerHorizontal 如果为true,将该控件的置于水平居中;
android:layout_centerVertical 如果为true,将该控件的置于垂直居中;
android:layout_centerInParent 如果为true,将该控件的置于父控件的中央;

// 指定移动像素
android:layout_marginTop 上偏移的值;
android:layout_marginBottom 下偏移的值;
android:layout_marginLeft 左偏移的值;
android:layout_marginRight 右偏移的值;

example:
android:layout_below = "@id/***"
android:layout_alignBaseline = "@id/***"
android:layout_alignParentTop = true
android:layout_marginLeft = “10px”

还可以指定边距等,具体详见API

五.TableLayout
表格布局类似Html里面的Table。每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素,设定他的对齐方式 android:gravity="" 。
每一个布局都有自己适合的方式,另外,这五个布局元素可以相互嵌套应用,做出美观的界面。TableLayout 将子元素的位置分配到行或列中。一个TableLayout 由许多的TableRow 组成,每个TableRow 都会定义一个 row 。TableLayout 容器不会显示row 、cloumns 或cell 的边框线。每个 row 拥有0个或多个的cell ;和html中的table查不多少。在实际中也经常使用。

Android的Margin和Padding跟Html的是一样的。通俗的理解 Padding 为内边框,Margin 为外边框
对应的属性为
android:layout_marginBottom="25dip"
android:layout_marginLeft="10dip"
android:layout_marginTop="10dip"
android:layout_marginRight="10dip"
android:paddingLeft="1dip"
android:paddingTop="1dip"
android:paddingRight="1dip"
android:paddingBottom="1dip"
如果左右上下都是相同的设置则可以直接设置
android:layout_margin="10dip"
android:padding="5dip"

过去,程序员通常以像素为单位设计计算机用户界面。例如,定义一个宽度为300像素的表单字段,列之间的间距为5个像素,图标大小为16×16像素 等。这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小。在有些情况下,用户界面可能会小到难以看清 内容。

与分辨率无关的度量单位可以解决这一问题。Android支持下列所有单位。

px(像素):屏幕上的点。

in(英寸):长度单位。

mm(毫米):长度单位。

pt(磅):1/72英寸。

dp(与密度无关的像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px。

dip:与dp相同,多用于android/ophone示例中。

sp(与刻度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。

为了使用户界面能够在现在和将来的显示器类型上正常显示,建议大家始终使用sp作为文字大小的单位,将dip作为其他元素的单位。当然,也可以考虑使用矢量图形,而不是用位图.
dp是与密度无关,sp除了与密度无关外,还与scale无关。
如果屏幕密度为160,这时dp和sp和px是一样的。1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。
那么原来TextView的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。
但如果设置成160dp或160sp的话。系统会自动将width属性值设置成320px的。
也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换

㈡ 如何定制 android 主界面

果你要定制一个Android系统,你想用你自己的Launcher(Home)作主界面来替换Android自己的Home,而且不希望用户安装的Launcher来替换掉你的Launcher.
我们可以通过修改Framework来实现这样的功能。

这里以Android2.1的源代码为例来实际说明。

1)首先了解一下Android的启动过程。
Android系统的启动先从Zygote开始启动,然后......(中间的过程就不说了).....一直到了SystemServer(framework)这个地方,看到这段代码:

/**
* This method is called from Zygote to initialize the system. This will cause the native
* services (SurfaceFlinger, AudioFlinger, etc..) to be started. After that it will call back
* up into init2() to start the Android services.
*/
native public static void init1(String[] args);

public static void main(String[] args) {
if (SamplingProfilerIntegration.isEnabled()) {
SamplingProfilerIntegration.start();
timer = new Timer();
timer.schele(new TimerTask() {
@Override
public void run() {
SamplingProfilerIntegration.writeSnapshot("system_server");
}
}, SNAPSHOT_INTERVAL, SNAPSHOT_INTERVAL);
}

// The system server has to run all of the time, so it needs to be
// as efficient as possible with its memory usage.
VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);

System.loadLibrary("android_servers");
init1(args);
}

public static final void init2() {
Log.i(TAG, "Entered the Android system server!");
Thread thr = new ServerThread();
thr.setName("android.server.ServerThread");
thr.start();
}
}

从SystemServer的main函数开始启动各种服务。
首先启动init1,然后启动init2.
从上面的注释可以看到:init1这个方法时被Zygote调用来初始化系统的,init1会启动native的服务如SurfaceFlinger,AudioFlinger等等,这些工作做完以后会回调init2来启动Android的service。

这里我们主要来关注init2的过程。
init2中启动ServerThread线程,
ServerThread中启动了一系列的服务,比如这些:

ActivityManagerService
EntropyService
PowerManagerService
TelephonyRegistry
PackageManagerService
AccountManagerService
BatteryService
HardwareService
Watchdog
SensorService
BluetoothService
StatusBarService
ClipboardService
InputMethodManagerService
NetStatService
ConnectivityService
AccessibilityManagerService
NotificationManagerService
MountService
DeviceStorageMonitorService
LocationManagerService
SearchManagerService
FallbackCheckinService
WallpaperManagerService
AudioService
BackupManagerService
AppWidgetService

这些大大小小的服务起来以后,开始
((ActivityManagerService)ActivityManagerNative.getDefault()).systemReady()
在systemReady后开始开始启动Launcher。

在寻找Launcher的时候是根据HOME的filter(在Manifest中定义的<category android:name="android.intent.category.HOME" />)来过滤。
然后根据filter出来的HOME来启动,如果只有一个HOME,则启动这个HOME,如果用户自己装了HOME,那就会弹出来一个列表供用户选择。

我们现在希望从这里弹出我们自己定制的Launcher,同时也不希望弹出选择HOME的界面,我们不希望用户修改我们的home,比如我们的home上放了好多广告,以及强制安装的程序,不希望用户把它干掉。

我们可以通过这样来实现:

2) 定义一个私有的filter选项,然后用这个选项来过滤HOME.
一般情况下我们使用Manifest中定义的<category android:name="android.intent.category.HOME"来过滤的,我们现在增加一个私有的HOME_FIRST过滤。

在Intent.java(frameworks/base/core/java/android/content/Intent.java)中添加两行代码

//lixinso:添加CATEGORY_HOME_FIRST
@SdkConstant(SdkConstantType.INTENT_CATEGORY)
public static final String CATEGORY_HOME_FIRST = "android.intent.category.HOME_FIRST";

3)修改和CATEGORY_HOME相关的所有的地方,都改成HOME_FIRST,主要是framework中的这几个地方:

frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中
//intent.addCategory(Intent.CATEGORY_HOME);
改成intent.addCategory(Intent.CATEGORY_HOME_FIRST); //lixinso:
//if (r.intent.hasCategory(Intent.CATEGORY_HOME)) {
改成if (r.intent.hasCategory(Intent.CATEGORY_HOME_FIRST)) { //lixinso: Intent.CATEGORY_HOME -> Intent.CATEGORY_HOME_FIRST

frameworks/base/services/java/com/android/server/am/HistoryRecorder.java中
// _intent.hasCategory(Intent.CATEGORY_HOME) &&
改成 _intent.hasCategory(Intent.CATEGORY_HOME_FIRST) && //lixinso: Intent.CATEGORY_HOME->Intent.CATEGORY_HOME_FIRST

frameworks/policies/base/mid/com/android/internal/policy/impl/MidWindowManager.java中
//mHomeIntent.addCategory(Intent.CATEGORY_HOME);
改成 mHomeIntent.addCategory(Intent.CATEGORY_HOME_FIRST); //lixinso

frameworks/policies/base/mid/com/android/internal/policy/impl/RecentApplicationsDialog.java中
//new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),0);
改成 new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME_FIRST),0); //lixinso

frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java中
//mHomeIntent.addCategory(Intent.CATEGORY_HOME);
改成 mHomeIntent.addCategory(Intent.CATEGORY_HOME_FIRST); //lixinso

frameworks/policies/base/phone/com/android/internal/policy/impl/RecentApplicationsDialog.java中
//ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),0);
改成 ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME_FIRST),0); //lixinso

4) 写一个自己的Launcher.
可以参考android sample中的Launcher,或者android源代码中的 /packages/apps/Launcher 来写。
在Launcher中标记其是不是Launcher的最关键的代码时Manifest中的filter:android:name="android.intent.category.HOME"
现在我们定义了自己的filter,那么,我们在我们自己写的Launcher中将Manifest改为:
<application android:process="android.process.acore3" android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".FirstAppActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME_FIRST" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY" />
</intent-filter>
</activity>
</application>

然后将编译好的apk放到/out/target/proct/generic/system/app目录下。

5)将Android自带的Launcher删除掉,包括源代码(packages/apps/Launcher)和apk(/out/target/proct/generic/system/app/Launcher.apk)。

6)
做完这些工作,就可以重新编译Android了,我们可以编译修改过的几个相关的包。
如果之前编译过了Android源码,可以用mmm命令来编译部分的改动。
这里需要这样编译:

$ . build/envsetup.sh
$ mmm frameworks/base
$ mmm frameworks/base/services/java
$ mmm frameworks/policies/base/mid
$ mmm frameworks/policies/base/phone

7)
编译完成后重新生成img文件。
$ make snod

8) 现在可以启动Android模拟器来看效果了。
首先设置环境变量:
$ export ANDROID_PRODUCT_OUT= ./out/target/proct/generic
然后切换到
$ cd ./out/host/linux-x86/bin
运行
$ ./emulator

这样我们启动的模拟器里面用的image就是我们刚才编译好的自己定制的东西了。
从模拟器上可以看到启动的Launcher是我们自己的Launcher,不会出现默认的Launcher了,也不会出现选择界面。

9)我们再验证一下,如果用户装上了一个其他的Launcher(Home)会怎么样。
从网上找一个一般的Launcher或者自己写一个一般的Launcher装上去,重新启动,不会出现选择界面。
按HOME键也不会出来两个HOME来选择。

㈢ 如何做好android应用的界面设计

这段时间自己研究了挺多安卓的东西,有了更多的想法,在此描述一下。
方法/步骤
学习原生软件的界面开发,而且最好还是看一些开源的,无论从设计的角度还是从开发的角度都是极好的。
比如优秀的作品很多,这些不开源学习界面就好,开源的可以看看系统的应用。和系统本身结合的非常好,设计风格和系统也很统一,给用户较好的体验。
2
确定整体产品色彩基调,色彩基调可以从产品功能中提取,也可以从产品LOGO中提取;
3
做出界面原型,包括功能布局、页面交互等元素;
4
在界面原型基础上进行色彩添加,进一步的细节调整;
5
有了好的外形基础后,再就是回归到用户体验。记住用户才是第一位的。交互设计通常靠外形吸引用户,但真正留住用户的是细节上的人性化。让这些极简的设计细节控制用户的生活习惯,最终让用户离不开它们!根据用户使用体验反馈再次修改界面,不断完善。

㈣ Android设置界面怎么做

步骤/方法
1
1、下载设置必备的几款软件,分别是LauncherPro、Desktop Visualizer。

2
2、下载Android界面显示必备的Windows Phone 7的素材包。

3
3、下载透明时钟插件。

4
4、在以上必备软件素材下载完毕之后,安装LauncherPro和Desktop Visualizer以及透明时钟,把Android界面显示必备的Windows Phone 7的素材包的素材文件夹,放置到手机SD卡里。

5
5、选择LauncherPro作为当前默认界面,需在一款空白的屏幕。点击Android手机的Menu键,选择首选项(Preferences)进入LauncherPro的设置。

6
6、选择外观设置,选择快捷菜单背景,进入图库,找到以下图片,设置即可。
Windows Phone 7界面底部素材

7
7、把LauncherPro的界面设置成五行,在刚刚的设置中找到高级设置,勾选桌面5行图标。

8
8、回到桌面,把LauncherPro的底部图标统统清除,长按其中一个,然后选择更改快捷方式,选择空白,最后在中间的原点处长按选择更改快捷方式,选择程序菜单,再选择自定义图标,再到图库中选择上图的背景图片即可。在这完成之后,Android界面显示的Windows Phone 7底部就已经完成。

9
9、在桌面空白处长按,选择Desktop Visualize(中)的Widget,进入Widget设置界面。在选择图标中,选择影像档,在图库中选择添加前面下载的小图片素材,在选择操作中添加你要打开的程序。
添加Desktop Visualiz的Widget
长按新添加的Widget,拖动小箭头调整大小。调整完毕后,按返回键。 希望可以帮到你

㈤ 如何做好安卓应用的界面设计

现在的软件应用大致可以分为安卓系统和ios的系统。而iOS系统只适用于苹果软件,不适用于其他的软件。而现在大多数的电子产品,国产的基本上都是安卓系统.随着中国市场的迅速发展。安卓系统比越来越多的人使用,但是怎么样才能做好安卓应用的页面设计呢


首先我们要想做好安卓应用的页面设计,我们必须对安卓系统进行更深入的了解。充分理解安卓应用所使用的范围和继续开发,研究安卓应用的一些拓展的功能。深入的剖析安卓系统,他的优点和缺点,以及有什么改进的地方。以及改进的方法。

总体而言,就像我们现在的社会主义道路一样。虽然是借鉴恩格斯和马克思他们的先进思想,但是我们还必须结合我们的毛泽东思想和邓小平理论。走出一条属于我们中国的特色的社会主义道路。安卓应用的页面设计也是这样,要结合自己本身的实际情况。设计出独特的,吸引人的设计。

㈥ android界面设计有什么好的方案

  • 多看android官方规范,灵活使用8dp(一般间距)与48dp(一般可触摸区域)。

  • 灵活使用点九切图。图标与按钮分开切,字全让研发自己输入。千万不要切死图。

  • 早期的时候跟研发约好时间。比如某个半天,你弄个笔记本,跟研发坐一起,严格的把你的规范执行下去,后期大家合作起来就方便了。

  • 图一定要像素级别(包括720的图标),所有锚点都优化好。

  • 还是研发吧,没事多往那边跑,带点干果花生什么的一边吃一边改。他是怎么实现的,你一定要问清楚,你想怎么实现,你也得跟他讲清楚。

  • 仍然还是研发,他们不怕麻烦,只是怕做好后又改。所以不要老让他们尝试,自己多做效果图,严谨一点,多用axure把效果图转手机里看看。

  • 做一个UI套件(dribbble上搜索UI kit看下别人怎么做的),后期你也会方便很多,重要的是交接工作会很好。

  • 多看知乎,有些关于ps的技巧,作图技巧还蛮实用的。



㈦ 安卓开发,怎么做一个全屏的界面

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN)。
在android项目的主配置文件的application的属性中设置,设置方式android:theme="@android:style/Theme.NoTitleBar.Fullscreen"。
在android项目的主配置文件的application的属性中设置,设置方式二:
android:theme="@style/fullscreem"。
super.onCreate(savedInstanceState)。
requestWindowFeature(Window.FEATURE_NO_TITLE);//无title
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN。
WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏
setContentView(R.layout.main)。
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//无title
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN。
WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏
setContentView(R.layout.main。

㈧ Android程序界面设计有哪些方式

一、 界面布局之线性布局(LinearLayout)
这种布局比较常用,也比较简单,就是每个元素占一行,把它按照横向排放,也就是每个元素占一列。在布局中都按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。
二、 界面布局之相对布局(RelativeLayout)
相对布局是android界面设计中比较常用和好用的一个布局方式。
三、 界面布局之表格布局(TableLayout)
表格布局采用行、列的形式来管理元素组件。TableLayout的行和列不需要声明,而是采用添加方法控制。
每次在TableLayout中添加一个TableRow,一个TableRow就代表表格中的一行,也同样是容器,往里面添加一个子组件就代表增加一列。在表格布局中,列的宽度由最宽的那个单元格决定,整个表格布局宽度取决于父容器的宽度
四、 界面布局之绝对布局(AbsoluteLayout)
特点:以坐标的方式来定位在屏幕上的位置,引起缺乏灵活性,在没有绝对定位的情况下相比其他类型的布局更难维护
五、 界面布局之帧布局(FrameLayout)
FrameLayout是五大布局中最简单的一个布局。在帧布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。

㈨ 怎么做android的一个界面

这涉及构建屏幕基本元素,怎么在xml(定义文件)内定义屏幕、用你的代码生成、在不同任务你需要操作你的用户接口。Android生成屏幕有三种方式:xml配置生成;通过你自己用户界面接口生成;直接用代码生成。
根据MVC原则,UI应该与程序逻辑相分离,因此,在XML中定义UI结构是高度推荐的。此外,一个程序从一个屏幕方案调整到另一个也容易得多。在XML中定义UI跟创建一个普通的HTML文档非常相似,例如,你有如下的一个文件:
<html>

<head>

<title>PageTitle</title>

</head>

<body>

Thecontentofthebodyelement.

</body>

</html>

就如Android的XML布局一样,所有的元素都是结构化的,能够通过树形结构来表示:

<?xmlversion=”1.0″encoding=”utf-8″?>

<LinearLayout

http://schemas.android.com/apk/res/android

android:orientation=”vertical”

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”>

<TextView

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:text=”HelloWorld”/>

</LinearLayout>

1屏幕元素的层次
Android应用程序的基础功能单元就是Activity–android.app.Activity类中的一个对象。一个Activity可以做很多事,但是他自己并不会显示到屏幕上。想要让你的Activity显示在屏幕上并且设计它的UI,你需要使用view和viewgroup–Android平台基础的用户界面表达单元。
Views
基础类的对象。它是一个存储有屏幕上特定的一个矩形内布局和内容属性的数据结构。一个View对象处理测距和布局,绘图,焦点变换,滚动条,还有屏幕区域自己表现的按键和手势。
类作为一个基类,为widget(窗体部件)服务,widget–是一组用于绘制交互屏幕元素的完全实现子类。Widget处理它们自己的测距和绘图,所以你可以更快速地用它们去构建你的UI。可用到的widget包括Text,EditText,InputMethod,Button,RadioButton,Checkbox,和ScrollView……。
Viewgroups
一个ViewGroup是一个android.view.Viewgroup类的对象。正如同它的名字表明的一样,一个viewgroup是一个特殊的view对象,它的功能是去装载和管理一组下层的view和其他viewgroup,Viewgroup让你可以为你的UI增加结构并且将复杂的屏幕元素构建成一个独立的实体。
group类作为一个基类为layout(布局)服务,layout–是一组提供屏幕界面通用类型的完全实现子类。layout让你可以为一组view构建一个结构。
一个树形结构的界面
在Android平台上,你用view树和viewgroup节点来定义一个Activity的UI,就如同下面图表一样。这个树可以如你需要那样简单或者复杂,并且你可以使用Android的预定义widget和layout或者你自定义的view类型来构建它。

㈩ 如何做好安卓应用的界面设计

android界面设计的工作在正规情况下,会和编程部分分开,属于UI设计师的工作范畴,当然UI设计师与程序开发者必须了解相关的android的UI构建机制(接口,实现方法等等)方便协同工作。 安卓的按钮包括系统默认的其实都是图片,调用的图片资源由具体的代码控制,这些代码的实现方法开发者必须弄懂,droiddraw也不过是生成一些预先写好的调用默认图片的代码。 UI设计要涉及,点对点显示,效果实现方式,界面人机交互原理,内存占用优化优化等等好多原则,因此不同dpi的界面实际上不仅仅是简单地调整一下png大小而已(如果只是简单缩放直接用全局的代码实现快得多)。不同的UI设计师会有自己的不同实现方法,例如我就比较喜欢用photo的动作自己做批处理脚本

热点内容
ipad有哪些好用的c语言编译器 发布:2024-05-19 08:41:56 浏览:766
征途手游版脚本 发布:2024-05-19 08:38:11 浏览:164
安卓咪咕音乐怎么录制视频 发布:2024-05-19 07:56:06 浏览:838
如何搞出超大声的听声辨位安卓版 发布:2024-05-19 07:46:21 浏览:927
linux安全模式 发布:2024-05-19 07:27:25 浏览:176
为什么安卓手机安装不了cpk 发布:2024-05-19 07:22:21 浏览:313
pythonempty 发布:2024-05-19 07:15:16 浏览:930
路由器虚拟服务器搭建 发布:2024-05-19 07:15:15 浏览:999
方舟编译器何时推送 发布:2024-05-19 07:15:10 浏览:599
魔兽世界自动钓鱼脚本 发布:2024-05-19 06:43:07 浏览:496