android 基础 res文件 valuse

//array/

然后在在arrays.xml中使用<string-array>或者<integer-array>标签定义数组:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="languages">
        <item>c语言</item>
        <item>java </item>
        <item>php</item>
        <item>xml</item>
        <item>html</item>
    </string-array>
 
    <integer-array name="reminder_methods_values" translatable="false">
        <item>1</item>   
        <item>2</item>  
        <item>3</item>  
    </integer-array>
 
</resources>

在java代码中引用
Resources res =getResources();
String[] languages = res.getStringArray(R.array.languages);
String[] reminder_methods = res.getIntArray(R.array.reminder_methods_values);


在xml中引用
这里以spinner控件为例,因为spinner的entries属性刚好需要的是数组资源
<Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/languages"
  />

注意上面引用的时候是@array。


//attrs/

添加文件attrs.xml,位于res\values目录下
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="myView"> 
        <attr name="textColor" format="color"/> 
        <attr name="textSize" format="dimension"/> 
    </declare-styleable> 
</resources>

创建自定义控件,继承 某 控件,组合控件

//自定义新控件/

自定义继承控件还好说,但是继承view所有的都要自己写就麻烦很多。下面是简单的继承view
public class MyView extends View {
	private Paint mPaint;
	private static final String mString = "Welcome to Mr Wei's blog";
	public MyView(Context context) {
		super(context);
		mPaint = new Paint();
	}


	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
		mPaint = new Paint();
		TypedArray a = context.obtainStyledAttributes(attr, R.styleable.myView);//TypedArray是一个数组容器 
		float textSize = a.getDimension(R.styleable.myView_textSize, 30);//防止在XML文件里没有定义,就加上了默认值30 
		int textColor = a.getColor(R.styleable.myView_textColor, 0xFFFFFFFF);//同上,这里的属性是:名字_属性名 
		myPaint.setTextSize(textSize); 
		myPaint.setColor(textColor); 
		a.recycle();//我的理解是:返回以前取回的属性,供以后使用。以前取回的可能就是textSize和textColor初始化的那段
	}


	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		super.onDraw(canvas);
		//设置填充     
        mPaint.setStyle(Style.FILL);
        //画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标     
        canvas.drawRect(new Rect(10, 10, 100, 100), mPaint);    
        mPaint.setColor(Color.BLUE);
        //绘制文字 
        canvas.drawText(mString, 10, 110, mPaint);  
	}
}


//XML中的命名空间/

Android自定义控件的属性,在xml中使用自己自定义的attr的时候,其中有一步就是要自定义一个xml的命名空间后
然后再给自定义属性赋值,现在发现不知道什么时候开始Android把这个改了,现在发现可以统一用
xmlns:app="http://schemas.android.com/apk/res-auto"
而不是原来的:
xmlns:app="http://schemas.android.com/apk/App的Package名"

xmlns:tools="http://schemas.android.com/tools"
这些属性用于渲染布局,而不会影响到程序运行。也就是说只在预览布局时出现,在程序运行时相当于该属性不存在。

///组合控件//

1,activity中使用平常的布局layoutA
2,layoutA中有自定义控件com.lgq.view.ItemTextView如下,带有公共属性,还有自定义属性app:***,
使用app:***需要在根控件中添加xmlns:app="http://schemas.android.com/apk/App的Package名"
<com.lgq.view.ItemTextView
	android:id="@+id/mobile_number_itv"
	app:item_edit_hint="请输入手机号"
	app:item_lable="手机号">
</com.chinasoft.wubafd.view.ItemTextView>

3,app:**后面的属性,来自attrs中的定义的属性,如下:
<resources>
    <declare-styleable name="item_text_view">
        <attr name="item_lable" format="string|integer"></attr>
        <attr name="item_edit_hint" format="string|integer"></attr>
    </declare-styleable>
</resources>

4,那么这些属性是怎么添加到自定义控件当中的呢,请看:我下面是做组合控件的使用,不是做一个新的控件。
定义一个MyView继承你的布局文件(如:LinearLayout)
MyView的构造函数中inflate一个布局,进行控制:
<pre name="code" class="java">      //填充布局R.layout.item_text_view,就是简单的布局
	LayoutInflater.from(context).inflate(R.layout.item_text_view, this, true);
	//得到布局中的控件
	itemLable = (TextView) findViewById(R.id.item_lable);
	//得到atrrs中命名的item_text_view的属性集合控制
	TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.item_text_view);
	//获得item属性的值
	CharSequence lableText = typedArray.getText(R.styleable.item_text_view_item_lable);
	//把属性设置到某个控件
	if (lableText != null) 
		itemLable.setText(lableText);
	//记得要关闭
	typedArray.recycle();

 
 
5.这样就可以用一个控件,控制,多个控件。


//dimens/

1,尺寸控制。
2,同时可以做屏幕适配控制,和drawable的原理是一样的。创建多个文件,适应不同分辨率。网上有很多自动生成的教程。
http://blog.csdn.net/ocean20/article/details/23353663

//strings/

1,一般用法

String mess = getResources().getString(R.string.mess_1);


2,控制部分文字颜色和字体大小
<string name="exchange_txt_hint"><Data><![CDATA[请使用<font color="#ff0000"><b>%1$s</b></font>牛兑换<font color="#00ff00"><b>%2$s</b></font>%3$s 上网时长]]></Data></string> 
tv = (TextView) findViewById(R.id.tv);  
String exchange = getResources().getString(R.string.exchange_txt_hint);  

tv.setText(Html.fromHtml(exchange));


3,特殊字符

<string name="hello_Box">hello & Box</string>

实际应该写成:

<string name="hello_Box">hello &#038; Box</string>


4,格式化
<string name="baoxiang">您今天打了%1$d局,还差%2$d局可获得%3$s!</string> 
%1$d表达的意思是整个name=”baoxiang”字符串中,第一个整型
String text = String.format(getResources().getString(R.string.baoxiang), 2.18,"银宝箱"); 
结果您今天打了 2 局,还差 18 局可获得 银宝箱 !

//color/

颜色控制


//style/

样式控制,命名,以及继承
1,控件样式:单个控件属性统一监控
2,主题样式:app样式监控













猜你喜欢

转载自blog.csdn.net/l331258747/article/details/52861758
今日推荐