学习Android有段时间了,现在才正式接触到style.xml这里, 在编写Android的搜索栏时遇到了一些问题在这里总结下:
1、首先style.xml文件可以定义很多,比如说如果许多View有用相同的设置,可以直接在style.xml文件中定义一种style,然后在布局文件引用时直接style=”“就好了,如:
<style name="editTextStyle">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">@drawable/search_edit_bg</item>
<!--drawablepadding设置共处一个View内的对像的距离,不影响父View的边框-->
<item name="android:drawablePadding">5dp</item>
<item name="android:gravity">center_vertical</item>
<item name="android:imeOptions">actionSearch</item>
<item name="android:singleLine">true</item>
<item name="android:textSize">16sp</item>
<item name="android:padding">5dp</item><!--设置最外层View距边框的距离。-->
<item name="android:hint">Search</item>
</style>
如果使用这个样式这样用:
<EditText
style="@style/editTextStyle"
android:id="@+id/et_search"/>
2、关于shape的使用,其中有好多属性现在都忘了,复习下:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--solid指的是填颜色-->
<solid android:color="@android:color/white"/>
<!--stroke指的是边框线,,这里定义了边框线颜色-->
<stroke
android:width="1px"
android:color="@android:color/darker_gray"/>
<!--conrners指是角的圆滑度-->
<corners android:radius="15dp"/>
<!--gradient设置的是颜色的渐变,angle指的是方向,当angle=0时,渐变色是从左向右。 然后逆时针方向转,当angle=90时为从下往上。-->
<gradient android:startColor="#9cff00"
android:endColor="#197600"
android:angle="270"/>
</shape>
可参考:http://blog.youkuaiyun.com/lan410812571/article/details/9946991
3、如何修改drawable的图像的大小:
private Drawable zoomDrawable(Drawable drawable, int w, int h) {
//要注意这里的值都是以dp为单位的。
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Log.d("XXXXX", width + " " + height);
Bitmap oldbmp = drawableToBitmap(drawable);
Matrix matrix = new Matrix();
float scaleWidth = ((float) w / width);
float scaleHeight = ((float) h / height);
matrix.postScale(scaleWidth, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0,
width, height, matrix, true);
return new BitmapDrawable(null, newbmp);
}
private Bitmap drawableToBitmap(Drawable drawable) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565;
Bitmap bitmap = Bitmap.createBitmap(width, height, config);
Canvas canvas = new Canvas(bitmap);
//setBounds是设置一个矩形区域,前两个是起始坐标,后两个是结束坐标
//坐标相对于父VIWE来说的
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas);
return bitmap;
}
关于Drawable和Bitmap的知识,参考http://dyh7077063.iteye.com/blog/970672
END