Android资源文件使用经验

5.关于尺寸单位

    Android默认160dots per inch (在屏幕dpi为160的时候,1 dip == 1 px)
    有的手机是120 per inch, density的值为120/160=0.75(此时1 dip == 0.75 px)
    有的手机是240 per inch, density的值为240/160=1.5(此时1 dip == 1.5 px)
    编辑资源文件时候view的尺寸一定用dip,字体用sp
    dips * density = pixels
    必须直接指定的话,可通过dip转换,dp--->px如下:

   final float scale = getContext().getResources().getDisplayMetrics().density; 
   mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale + 0.5f);


21.android:duplicateParentState

微信的用户信息页面点击后整个ViewGroup背景变绿,右边向右的三角形view变白,可以使用这个属性实现

如果设置此属性,将直接从父容器中获取绘图状态(光标,按下等)。 注意仅仅是获取绘图状态,而没有获取事件,也就是你点一下LinearLayout时Button有被点击的效果,但是不执行点击事件。

android:duplicateParentState指的是当前控件是否跟随父控件的(点击、焦点等)状态

例:假设一Layout有两子View,对Layout进行监听点击事件;子ViewA一个设置duplicateParentState为true,子View设置为false,当点击Layout后,子ViewA的点击态背景变色成功,子ViewB背景态变色无效,因为点击事件被Layout捕获。效果如下图:

    <RelativeLayout  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:minHeight="44dp"  
        android:id="@+id/finger_memo"  
        android:background="@drawable/setting_bottom" >  
        <RelativeLayout android:layout_width="wrap_content"  
            android:layout_height="44dp"  
            android:layout_alignParentLeft="true"  
            android:layout_centerVertical="true"  
            android:duplicateParentState="false"  
            android:gravity="top"  
            android:id="@+id/txt_memo"  
            android:paddingTop="10.5dp"  
            android:paddingBottom="10.5dp">  
            <TextView  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:id="@+id/txt_finger_memo"  
                android:layout_alignParentTop="true"  
                android:includeFontPadding="false"  
                android:text="@string/info_troopintro"  
                android:layout_marginLeft="12dp"  
                android:minWidth="74dp"  
                android:textColor="@color/color_777777_white"  
                android:duplicateParentState="false"  
                android:textSize="15sp" />  
        </RelativeLayout>  
        <ImageView  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:id="@+id/open_arrow"  
            android:layout_alignParentRight="true"  
            android:layout_centerVertical="true"  
            android:layout_marginLeft="16dp"  
            android:layout_marginRight="12dp"  
            android:src="@drawable/arrow_right_gray_white" />  
        <RelativeLayout android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_centerVertical="true"  
            android:layout_toLeftOf="@id/open_arrow"  
            android:layout_toRightOf="@id/txt_memo"  
            android:duplicateParentState="true"  
            android:paddingTop="10.5dp"  
            android:paddingLeft="10.5dp"  
            android:paddingBottom="10.5dp">  
            <TextView  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:id="@+id/txt_finger_memo_content"  
                android:layout_gravity="center_vertical|left"  
                android:includeFontPadding="false"  
                android:textColor="@color/color_333333_white"  
                android:text="@string/content"  
                android:duplicateParentState="true"  
                android:textSize="15sp"/>  
        </RelativeLayout>  
    </RelativeLayout>  

19.drawninepatch工具的使用方法

  在左边和上边加一条黑色线控制的是可拉伸区域。右边和下边控制的是内容区域。这个工具在一张图片中间有一块内容而又要防止这块内容拉伸的时候,所起作用非常明显。按住shift点击鼠标可以消除黑色线。

工具的右侧展示的是拉伸的预览效果,从上到下分别是纵向拉伸、横向拉伸、整体拉伸。对工具的使用还需要进一步探索。

20.Android屏幕分辨率详解(VGA、HVGA、QVGA、WVGA、WQVGA)

这些术语都是指屏幕的分辨率。
 VGA:Video Graphics Array,即:显示绘图矩阵,相当于640×480 像素;
 HVGA:Half-size VGA;即:VGA的一半,分辨率为480×320;
 QVGA:Quarter VGA;即:VGA的四分之一,分辨率为320×240;
 WVGA:Wide Video Graphics Array;即:扩大的VGA,分辨率为800×480像素;
 WQVGA:Wide Quarter VGA;即:扩大的QVGA,分辨率比QVGA高,比VGA低,一般是:400×240,480×272;
 

发展历程不一样,wm的手机一开始作为商务机,分辨率就是320*240,后边提高到640*480,再到后来的800*480。HVGA没有作为wm手机的重点,或者说基本忽略了在这个分辨率级别。
 再谈谈android,我个人认为安卓是效仿iphone的设计思路。
 1,HVGA基本上属于性价比比较好的方案。分辨率适中,不像320*240的颗粒感那样严重。因为如果提高分辨率就要提高机器的图像处理组件,也就是对硬件的要求相应提高,价格自然是不低。
 2,谷歌手机一开始推广就是用这个分辨率,例如G1,G2等都是采用HVGA的分辨率。
 3,现在android的软件基本上都会自动适应HVGA(还包含别的,例如VGA,WVGA等,这个就要看软件作者的了)

16.Rotate(旋转)的xml文件编写方法。动画资源文件中的单位

    <rotate android:fromDegrees="0"  
      
    android:toDegrees="+350"  
      
    android:pivotX="50%"  
      
    android:pivotY="50%"  
      
    android:duration="3000"/>  
      
    androidpivotX的值共有三红设置方法:  
      
    1.android:pivotX="50"这种方法使用绝对位置定位;  
      
    2.android:pivotX="50%"这种方法相对于控件本身定位;  
      
    3.android:pivotX="50%p"这种方法相对于控件的父控件定位;  

15.color资源的使用注意

在color中定义的color资源#AARRGGBB的颜色,

在代码中set颜色的时候直接写R.color.*和

getResources().getColor(R.color.*);的效果是不一样的。务必注意

14.逐帧动画资源文件模板

    <?xml version="1.0" encoding="utf-8"?>  
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"  
        android:id="@+id/selected" android:oneshot="false" >  
        <item android:drawable="@drawable/horse1" android:duration="300"/>  
        <item android:drawable="@drawable/horse2" android:duration="300"/>  
        <item android:drawable="@drawable/horse3" android:duration="300"/>  
        <item android:drawable="@drawable/horse4" android:duration="300"/>  
        <item android:drawable="@drawable/horse5" android:duration="300"/>  
        <item android:drawable="@drawable/horse6" android:duration="300"/>  
    </animation-list>  

android:oneshot="false" //是否循环播放

12.WebView load html文档

mWebView.getSettings().setDefaultTextEncodingName("UTF-8");
mWebView.loadData(it.getStringExtra(CONTENT), "text/html", "UTF-8");


11.ListView 中item的起始位置

  当没有设置header的时候是从0开始;设置headerView的情况下,item是从1开始的。

10.TextView添加下划线的方法---比如网址

①在代码中实现

mLinkText.setText(Html.fromHtml("<u>"+mLinkUrl+"</u>"));


②在资源文件中
<string name="helloworld"><u>yesorno</u></string>


9.省资源的设置背景方法

    <?xml version="1.0" encoding="utf-8"?>  
    <bitmap android:src="@drawable/bg" android:tileMode="repeat"  
      xmlns:android="http://schemas.android.com/apk/res/android" />  

bg为一个非常小的图片,tileMode重复绘制。

8.常用的一些常量

     View.GONE | VISIBLE | INVISIBLE

     ScaleType的常量如7.

     LayoutParams的常量ViewGroup.LayoutParams.FILL_PARENT,MATCH_PARENT,WRAP_CONTENT

  --8.3  ActionBar的常量NAVIGATION_MODE_LIST

 弹出菜单,NAVIGATION_MODE_STANDARDNAVIGATION_MODE_TABS选项卡

----8.4 MenuItem的常量

SHOW_AS_ACTION_ALWAYS
SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
SHOW_AS_ACTION_IF_ROOM 
SHOW_AS_ACTION_NEVER 
SHOW_AS_ACTION_WITH_TEXT 

 

7.ImageVew的ScaleType属性

从网络上获取的图片尺寸大小不一,可以设置这个属性,保持一样大小。这是一个枚举型常量可以取值:

CENTER, CENTER_CROP, CENTER_INSIDE, FIT_CENTER, FIT_END, FIT_START, FIT_XY, MATRIX

iv.setScaleType(ImageView.ScaleType.FIT_XY);即可让图片适应宽高一样大了,不过有拉伸变形。

有一个任务 显示一张图片的中间地方的图片
1、 什么也不用设 只要固定了imageView的宽和高 就会自动缩放来填充这个imageview

2、截取  一张大图 我要截取其中的部分

Java代码 
Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height) 

Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height) 



例如Java代码 
Bitmap bitmap = Bitmap.createBitmap(b, 100, 20, 200, 300); 

Bitmap bitmap = Bitmap.createBitmap(b, 100, 20, 200, 300); 



从bitmap对象b的(100,20)开始截取宽为200,高为300的部分图像

3、ScaleType
参考:http://www.cnblogs.com/over140/archive/2010/09/19/1830703.html
上面那个虽然实现了 但是又重新生成了一张图片 内存开支有点大 我又找了找 可以用这个
Java代码 
iv.setScaleType(ImageView.ScaleType.CENTER); 

iv.setScaleType(ImageView.ScaleType.CENTER); 

android:scaleType 参数如下

Java代码 
matrix  
用矩阵来绘图  
   
fitXY  
拉伸图片(不按比例)以填充View的宽高  
fitStart  
按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的左边  
 
fitCenter  
按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的中间  
 
fitEnd  
按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的右边  
 
center  
按原图大小显示图片,但图片宽高大于View的宽高时,截图图片中间部分显示  
 
centerCrop  
按比例放大原图直至等于某边View的宽高显示。  
centerInside  
当原图宽高小于或等于View的宽高时,按原图大小居中显示;反之将原图缩放至View的宽高居中显示。 

4、得到缩放后的图片

Java代码 
Bitmap mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true);   

Bitmap mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true);  

这个方法可以得到自己固定宽和高后的图片 系统会自动缩放并返回

6.TextView实现文本内容滚动

6.1 用ScrollView或者HorizontalScrollView嵌套即可;前者实现垂直滚动,后者实现水平滚动  

6.2 如果想让TextView的文本无论多长都只有1行的话 singleLine为true即可,用ellipsize属性可以出现一个省略号,表示该TextView还有更多的内容,此属性可以取的值有start,middle,end,none,marquee,最后一个效果为走马灯。

最后一个效果试了试,不起作用,马灯没走,如下设置才会走马灯,那个marqueeRepeatLimit是个int值,如下就是不停的走,那个水平滚动为默认,不设置也可以。手机Android2.3测试OK


    <TextView android:layout_width="100px"  
            android:layout_height="wrap_content"  
            android:textColor="@android:color/white"   
            android:ellipsize="marquee"   
            android:focusable="true"   
            android:marqueeRepeatLimit="marquee_forever"   
            android:focusableInTouchMode="true"   
            android:scrollHorizontally="true"  
            android:text="she is the one that you never forget she is the heaven sent angel you met."  
            >  
        </TextView>  

1.ListView的使用

android:cacheColorHint="ffffffff"或者listView.setCacheColorHint(Color.alpha(255));//按住时候没有阴影

android:divider="#255"//分割线透明

android:fadingedge="none"边缘无阴影

代码相关:(此处为引用他人博客,向作者致谢)

在ListView里,HeaderView和FooterView也占一行,与其他的item一样,可以点击,有索引,HeaderView的索引为0.如果要使这两项不可点击,可以使用下面的方法:

publicvoid addFooterView(View v,Object data, boolean isSelectable)
publicvoid addHeaderView(View v,Object data, boolean isSelectable)

如果在view里已经填充数据,第二个参数可以为空,第三个参数设为false,即不可选择

 

通用属性:

android:hint="提示:请输入用户名"         //edittext常用
android:visibility="gone"或者setVisibility(View.GONE) //View.GONE 一个不占空间,彻底没了。
android:visibility="invisible"或者setVisibility(View.INVISIBLE) //View.INVISIBLE 区别是一个占空间,只是看不见而已

总结:

(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)

(2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)

(3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)

有layout的属性是本控件在容器中的位置 没有layout的属性是控件中的内容的位置

Strings.xml中关于使用多个空格的方法:&#160;        //想要多个空格就多加不要忘记分号


2.关于透明度

alpha:也可以设置控件透明(很实用)

颜色和不透明度 (alpha) 值以十六进制表示法表示。

任何一种颜色的值范围都是 0 到 255(00 到 ff)。

对于 alpha,00 表示完全透明,ff 表示完全不透明。

表达式顺序是“aabbggrr”,其中“aa=alpha”(00 到 ff);“bb=blue”(00 到 ff);“gg=green”(00 到 ff);“rr=red”(00 到 ff)。

例如,如果您希望对某叠加层应用不透明度为 50% 的蓝色,则应指定以下值:7fff0000

 

全透明:指定控件的android:background属性为"@android:color/transparent"

alpha值:android:background="#00000000"

4.selector.xml模板

    <?xml version="1.0" encoding="utf-8" ?>   
    <selector xmlns:android="http://schemas.android.com/apk/res/android">  
      <item android:state_window_focused="false"   
            android:drawable="@drawable/没有焦点时的图片背景" />   
      <item android:state_focused="true" android:state_pressed="true"   
            android:drawable=  
                  "@drawable/非触摸模式下获得焦点并单击时的背景图片" />   
      <item android:state_focused="false" android:state_pressed="true"   
            android:drawable="@drawable/触摸模式下单击时的背景图片" />   
      <item android:state_selected="true"   
            android:drawable="@drawable/选中时的图片背景" />   
      <item android:state_focused="true"   
            android:drawable="@drawable/获得焦点时的图片背景" />   
    </selector>   

Android中的几个标记美化的时候会用到:

<stroke>描边

<corner>角形状

<gradient>渐变色

<padding>内部边距

屏幕的方向:

The orientation of the screen from the user's point of view.

 landscape:水平

 portrait:垂直







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值