1.当TextView 设置宽度设置为match_parent的时候

TextView drawablePadding没有效果 ,字设置了center位置,但是和左边的图片离开很远

2.当TextView 设置的宽度为wrap_parent的时候,extView drawablePadding有效果

解决:自定义TextView

package com.charlie.chpro.customview;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.TextView; import com.charlie.chpro.R; /**
* 设置TextView Drawable的大小
* Created by Charlie on 2016/7/30.
*/ public class ResetDrawableSizeTextView extends TextView {
// 需要从xml中读取的各个方向图片的宽和高
private int leftHeight = -1;
private int leftWidth = -1;
private int rightHeight = -1;
private int rightWidth = -1;
private int topHeight = -1;
private int topWidth = -1;
private int bottomHeight = -1;
private int bottomWidth = -1; public ResetDrawableSizeTextView(Context context) {
super(context);
} public ResetDrawableSizeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
// super一定要在我们的代码之前配置文件
init(context, attrs, 0);
} public ResetDrawableSizeTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// super一定要在我们的代码之前配置文件
init(context, attrs, defStyle);
} /**
* 初始化读取参数
* */
private void init(Context context, AttributeSet attrs, int defStyle) {
// TypeArray中含有我们需要使用的参数
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.ResetDrawableSizeTextView, defStyle, 0);
if (a != null) {
// 获得参数个数
int count = a.getIndexCount();
int index = 0;
// 遍历参数。先将index从TypedArray中读出来,
// 得到的这个index对应于attrs.xml中设置的参数名称在R中编译得到的数
// 这里会得到各个方向的宽和高
for (int i = 0; i < count; i++) {
index = a.getIndex(i);
switch (index) {
case R.styleable.ResetDrawableSizeTextView_bottom_height:
bottomHeight = a.getDimensionPixelSize(index, -1);
break;
case R.styleable.ResetDrawableSizeTextView_bottom_width:
bottomWidth = a.getDimensionPixelSize(index, -1);
break;
case R.styleable.ResetDrawableSizeTextView_left_height:
leftHeight = a.getDimensionPixelSize(index, -1);
break;
case R.styleable.ResetDrawableSizeTextView_left_width:
leftWidth = a.getDimensionPixelSize(index, -1);
break;
case R.styleable.ResetDrawableSizeTextView_right_height:
rightHeight = a.getDimensionPixelSize(index, -1);
break;
case R.styleable.ResetDrawableSizeTextView_right_width:
rightWidth = a.getDimensionPixelSize(index, -1);
break;
case R.styleable.ResetDrawableSizeTextView_top_height:
topHeight = a.getDimensionPixelSize(index, -1);
break;
case R.styleable.ResetDrawableSizeTextView_top_width:
topWidth = a.getDimensionPixelSize(index, -1);
break;
}
} // 获取各个方向的图片,按照:左-上-右-下 的顺序存于数组中
Drawable[] drawables = getCompoundDrawables();
int dir = 0;
// 0-left; 1-top; 2-right; 3-bottom;
for (Drawable drawable : drawables) {
// 设定图片大小
setImageSize(drawable, dir++);
}
// 将图片放回到TextView中
setCompoundDrawables(drawables[0], drawables[1], drawables[2],
drawables[3]); } } /**
* 设定图片的大小
* */
private void setImageSize(Drawable d, int dir) {
if (d == null) {
return;
} int height = -1;
int width = -1;
// 根据方向给宽和高赋值
switch (dir) {
case 0:
// left
height = leftHeight;
width = leftWidth;
break;
case 1:
// top
height = topHeight;
width = topWidth;
break;
case 2:
// right
height = rightHeight;
width = rightWidth;
break;
case 3:
// bottom
height = bottomHeight;
width = bottomWidth;
break;
}
// 如果有某个方向的宽或者高没有设定值,则不去设定图片大小
if (width != -1 && height != -1) {
d.setBounds(0, 0, width, height);
}
}
}

xml里面使用

        <com.charlie.chpro.customview.ResetDrawableSizeTextView
android:id="@+id/ctv_left_title"
style="@style/back_toolbar_textview_style"
android:layout_gravity="left"
android:layout_marginLeft="@dimen/x18"
android:drawableLeft="@mipmap/back_normal"
android:drawablePadding="@dimen/x6"
android:text="@string/back"
android:textSize="@dimen/y32"
app:left_height="@dimen/y42"
app:left_width="@dimen/x24"
/>

TextView drawablePadding没有效果的更多相关文章

  1. android一个倾斜的TextView,适用于标签效果

    描述: android一个倾斜的TextView,适用于标签效果 应用截图: 使用说明: <com.haozhang.lib.SlantedTextView android:layout_wid ...

  2. 给TextView加上多彩效果:改变部分字体的大小和颜色

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/18363899 前言 在实际使用中,有时候会遇到特殊需求,比如pm突发奇想,想 ...

  3. SpannableString实现TextView的链接效果

    SpannableString实现TextView的链接效果 一.简介 TextView使用SpannableString设置复合文本TextView通常用来显示普通文本,但是有时候需要对其中某些文本 ...

  4. Android源码分析(十二)-----Android源码中如何自定义TextView实现滚动效果

    一:如何自定义TextView实现滚动效果 继承TextView基类 重写构造方法 修改isFocused()方法,获取焦点. /* * Copyright (C) 2015 The Android ...

  5. TextView跑马灯效果

    转载:http://www.2cto.com/kf/201409/330658.html 一.只想让TextView显示一行,但是文字超过TextView的长度怎么办?在开头显示省略号 android ...

  6. [Android1.5]TextView跑马灯效果

    from: http://www.cnblogs.com/over140/archive/2010/08/20/1804770.html 前言 这个效果在两周前搜索过,网上倒是有转载,可恨的是转载之后 ...

  7. Android学习总结——TextView跑马灯效果

    Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize="marquee" 2.TextView必须单行显示,即内容必须 ...

  8. 设置TextView的密码效果以及跑马灯效果

    密码效果以及跑马灯效果: xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  9. android中设置TextView/Button 走马灯效果

    在Android的ApiDemo中,有Button的走马灯效果,但是换作是TextView,还是有一点差异. 定义走马灯(Marquee),主要在Project/res/layout/main.xml ...

随机推荐

  1. Thinkphp 零散知识点(caa/js路径,引入第三方类,ajax返回,session/cookie)

    一.关于JS和CSS路径问题 1.找路径是从入口文件index.php来找的,而不是从文件本身所在位置来找, 因为我们访问时是访问的入口文件 2.在存放JS和CSS的时候可以放到public文件夹下 ...

  2. CodeForces 546C(队列)

    CodeForces 546C Soldier and Cards Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I ...

  3. 常用排序算法之——快速排序(C语言+VC6.0平台)

    经典排序算法中快速排序具有较好的效率,但其实现思路相对较难理解. #include<stdio.h> int partition(int num[],int low,int high) / ...

  4. SVN客户端忽略无关文件-备

    修改前请先备份文件 ~/.subversion/config. 1,打开Terminal,输入命令: $ open ~/.subversion/config   2,在打开的文件中寻找:`global ...

  5. Xcode can't verify the identity of the server

    当升级了苹果系统到 OS X El Captain 之后  ,打开Xcode 有时候会报错 如图 而且打开 svn  也会出类似错误  点击continue  了  下次 还会 出现 .这个很好解决 ...

  6. 「30天自制操作系统」 Stop & 「OS67 」 Start

    废话 整个十月都没有再写一点什么, 其实没什么好写的, 把书里的东西码出来贴在博客里实在没什么意思, 况且书里已经写得够详细了. 这本书给我最深刻的感觉是, 作者通过简化一些细节, 一步一步地模拟整个 ...

  7. Android Service 简介

    Service是Android系统中的一种组件,它跟Activity的级别差不多,但是它不能自己运行,只能后台运行,并且可以和其他组件进行交互.Service是没有界面的长生命周期的代码.Servic ...

  8. Linux&shell之结构化命令

    写在前面:案例.常用.归类.解释说明.(By Jim)使用if-then语句如果命令的退出状态是0(成功执行命令),将执行then后面的所有命令.如果命令的退出状态是0以外的其他值,那么then后面的 ...

  9. SQL SELECT INTO 语句

    SQL SELECT INTO 语句可用于创建表的备份复件. SELECT INTO 语句 SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用 ...

  10. delphi 通过控件的handle取得控件

    例子代码如下: vartsg:TstringGrid;begintsg:=Tstringgrid(FindControl(handle));//正常使用TstringGrid//tsg......./ ...