2016-07-27 13:08:54 nyist_12138 阅读数 1110
  • 4.5.数组&字符串&结构体&共用体&枚举-C语言专题第5...

    本课程综合讲解了数组、字符串、字符数组、结构体定义及使用、结构体对齐、复杂结构体结合指针、共用体定义及使用、大小端模式、枚举常量及其与宏定义的关联。通过本部分共15节课的理论讲解加代码实战,希望大家能够对以上知识点有更深入的理解。

    13697 人正在学习 去看看 朱有鹏


问题描述

这两天遇到了一个TextView字体对齐的问题,就是两个汉字,三个汉字和四个汉字对齐的问题,之前我采用的方法是用空格(使用\t是不可行的)或者两个字与四个字对齐时使用全角中文打空格,但是三个字就不好对齐,所以最后我选择了空格,但现在出现一个问题是Android主题修改的问题,有的主题自带的字体所占据宽度的是不一样的,导致本应该对齐的而无法对齐。

解决方法

这种情况要做各个屏幕和主题适配工作,解决方法是自定义TextView,比如:平均间距 =(四个字的宽度-两个字的宽度)/ (2-1)然后设置每个字的间距为平均间距:

public class JustifyTextView extends TextView {

    private int mLineY;
    private float mViewWidth = 0;

    public JustifyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
    }

    @Override
    protected void onDraw(Canvas canvas) {

        TextPaint paint = getPaint();
        paint.setColor(getCurrentTextColor());
        paint.drawableState = getDrawableState();
        String text = (String) getText();
        mLineY = 0;
        mLineY += getTextSize();
        float width = StaticLayout.getDesiredWidth(text, 0, text.length(), getPaint());
        drawScaledText(canvas, text, width);
        Paint.FontMetrics fm = paint.getFontMetrics();
        int textHeight = (int) fm.top;
        mLineY += textHeight;
    }

    private void drawScaledText(Canvas canvas, String line, float lineWidth) {
        float x = 0;
        float d = (mViewWidth - lineWidth) / (line.length() - 1);

        for (int i = 0; i < line.length(); i++) {
            String c = String.valueOf(line.charAt(i));
            float cw = StaticLayout.getDesiredWidth(c, getPaint());
            canvas.drawText(c, x, mLineY, getPaint());
            x += cw + d;
        }
    }

    public void setTitleWidth( TextView tv ){
        String text = (String) tv.getText();
        float width = StaticLayout.getDesiredWidth(text, 0, text.length(), tv.getPaint());
        mViewWidth = width;
        setWidth((int) mViewWidth);
        invalidate();
    }

}
在使用的地方这样使用:

<com.yitu8.client.application.views.JustifyTextView
                        android:id="@+id/tv_hb"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="30dp"
                        android:text="航班"
                        android:textColor="@color/home_text"
                        android:textSize="@dimen/font_14_size"
                         />
在组件中调用setTitleWith()将宽度设置成较长的标题:

tv_hb.setTitleWidth(tv_ycsj);
tv_mdd.setTitleWidth(tv_ycsj);




2018-03-09 21:48:48 qq_29697901 阅读数 45
  • 4.5.数组&字符串&结构体&共用体&枚举-C语言专题第5...

    本课程综合讲解了数组、字符串、字符数组、结构体定义及使用、结构体对齐、复杂结构体结合指针、共用体定义及使用、大小端模式、枚举常量及其与宏定义的关联。通过本部分共15节课的理论讲解加代码实战,希望大家能够对以上知识点有更深入的理解。

    13697 人正在学习 去看看 朱有鹏

android:text="hello"   显示文字

android:textColor="#000000"  

android:textSize="24sp"    字体大小使用sp

android:ellipsize="end"   如果显示不了用...代替

andriod:drowableRight="@drawble/icon"   右边显示图片icon

android:singleLine="true"  单行显示

android:ellipsize="marquee"

andriod:marqueeRepeatLimit="marquee_forever"

andriod:focusable="true"

android:focusableInTouchMode="true"   跑马灯


mTv1 = (TextView)FindViewById(R.id.tv_1);

mTv1.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);  中划线

mTv1.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);  下划线

mTv1.getPaint().setAntiAlias(True);  去除锯齿


2013-01-15 16:58:51 wletv 阅读数 33647
  • 4.5.数组&字符串&结构体&共用体&枚举-C语言专题第5...

    本课程综合讲解了数组、字符串、字符数组、结构体定义及使用、结构体对齐、复杂结构体结合指针、共用体定义及使用、大小端模式、枚举常量及其与宏定义的关联。通过本部分共15节课的理论讲解加代码实战,希望大家能够对以上知识点有更深入的理解。

    13697 人正在学习 去看看 朱有鹏

如果car_id 这个TextView的内的文字长度较长,会分行显示,这时,另一个TextView car_id_num还是会显示在第一行的位置。如果想让car_id_num显示在最后一行,需要添加android:layout_gravity="bottom",使其与父容器底部对齐。而之前没有对齐的原因是第一个控件已经增加了高度,导致父容器高度也增加了,但是第二个控件高度没有变化,所以显示在顶部,导致不能完全占满父容器的高度。添加android:layout_gravity="bottom"就解决了这个问题。

<?xml version="1.0" encoding="UTF-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" 
>

<TextView
android:id="@+id/car_id"
android:layout_width="250dip"
android:layout_height="wrap_content"
android:layout_weight="8"
android:textSize="14px"/>

 <TextView
android:id="@+id/car_id_num"
android:layout_width="50dip"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="233"
android:layout_marginLeft="10px"
android:layout_toRightOf="@id/card_id_title"
android:layout_gravity="bottom"
android:textSize="14px"/>

</LinearLayout>
2013-08-13 10:23:58 yan15826900142 阅读数 5615
  • 4.5.数组&字符串&结构体&共用体&枚举-C语言专题第5...

    本课程综合讲解了数组、字符串、字符数组、结构体定义及使用、结构体对齐、复杂结构体结合指针、共用体定义及使用、大小端模式、枚举常量及其与宏定义的关联。通过本部分共15节课的理论讲解加代码实战,希望大家能够对以上知识点有更深入的理解。

    13697 人正在学习 去看看 朱有鹏
android:baselineAligned="false"

2016-08-01 17:38:31 phenixyf 阅读数 5832
  • 4.5.数组&字符串&结构体&共用体&枚举-C语言专题第5...

    本课程综合讲解了数组、字符串、字符数组、结构体定义及使用、结构体对齐、复杂结构体结合指针、共用体定义及使用、大小端模式、枚举常量及其与宏定义的关联。通过本部分共15节课的理论讲解加代码实战,希望大家能够对以上知识点有更深入的理解。

    13697 人正在学习 去看看 朱有鹏
<?xml version="1.0" encoding="utf-8"?>
<!--
android:layout_above 将该控件的底部至于给定ID的控件之上
android:layout_below 将该控件的顶部至于给定ID的控件之下
android:layout_toLeftOf 将该控件的右边缘和给定ID的控件的左边缘对齐
android:layout_toRightOf 将该控件的左边缘和给定ID的控件的右边缘对齐

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

android:alignParentBottom 如果该值为true,则将该控件的底部和父控件的底部对齐
android:layout_alignParentLeft 如果该值为true,则将该控件的左边与父控件的左边对齐
android:layout_alignParentRight 如果该值为true,则将该控件的右边与父控件的右边对齐
android:layout_alignParentTop 如果该值为true,则将空间的顶部与父控件的顶部对齐

android:layout_centerHorizontal 如果值为真,该控件将被至于水平方向的中央
android:layout_centerInParent 如果值为真,该控件将被至于父控件水平方向和垂直方向的中央
android:layout_centerVertical 如果值为真,该控件将被至于垂直方向的中央

android:padding和android:layout_margin    通俗的理解 Padding 为内边框,Margin 为外边框
android:padding和android:layout_margin的区别,其实概念很简单,padding是站在父view的角度描述问题,它规定它里面的内容必须与这个父view边界的距离。margin则是站在自己的角度描述问题,规定自己和其他(上下左右)的view之间的距离,如果同一级只有一个view,那么它的效果基本上就和padding一样了。

android:layout_gravity="center"
android:gravity 属性是对该view 内容的限定.比如一个button 上面的text.  你可以设置该text 在view的靠左,靠右等位置..

Android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左  靠右等位置就可以通过该属性设置.


扩展性只是:

EditText的android:hint 

设置EditText为空时输入框内的提示信息。 


android:scaleType: 
android:scaleType是控制图片如何resized/moved来匹对ImageView的size。ImageView.ScaleType / android:scaleType值的意义区别: 

CENTER /center  按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示 

CENTER_CROP / centerCrop  按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽) 

CENTER_INSIDE / centerInside  将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽 

FIT_CENTER / fitCenter  把图片按比例扩大/缩小到View的宽度,居中显示 

FIT_END / fitEnd   把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置 

FIT_START / fitStart  把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置 

FIT_XY / fitXY  把图片不按比例扩大/缩小到View的大小显示 

MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。 

要注意一点,Drawable文件夹里面的图片命名是不能大写的。


http://blog.csdn.net/sky_plum_blossom/article/details/49333991


没有更多推荐了,返回首页