【问题标题】:How get Vertical Button view from xml如何从 xml 获取垂直按钮视图
【发布时间】:2014-04-17 07:36:06
【问题描述】:

我想在 Vertically 中创建一个 Button。也许我们可以通过扩展一个按钮并将画布重新渲染(旋转)到垂直,我们可以获得自定义 Button。但我需要它来自 xml。检查图形表示。我需要这样的按钮。

【问题讨论】:

  • 你不能在你的 xml 布局中包含那个自定义按钮类吗?
  • 如果您的目标是 >= API 11,您可以使用 android:rotation 属性
  • 你想让你的文本在按钮上也是垂直的吗?

标签: android android-layout android-fragments android-listview


【解决方案1】:

请看下面的链接,应该有解决您问题的方法

http://blog.stylingandroid.com/archives/796

这是关于如何创建垂直文本视图的教程 但由于 Button 类扩展了 TextView,本教程也适用于 Buttons

更新

1) 在 res/values/styles.xml 中创建一个样式,我们稍后会用到:

    <?xml version="1.0" encoding="utf-8"?>
    <resources
        xmlns:android="http://schemas.android.com/apk/res/android">
        <style name="verticalTextStyle"
            parent="android:Widget.TextView">
            <item name="android:padding">20dp</item>
            <item name="android:textSize">20sp</item>
        </style>
    </resources>

2) 将名为 hello 的默认字符串替换为 res/values/strings.xml 中的一个命名文本:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="text">Vertical Text</string>
        <string name="app_name">VerticalText</string>
    </resources>

3) 创建自定义 VerticalTextView 类

    public class VerticalTextView extends TextView
    {
        final boolean topDown;

        public VerticalTextView( Context context, 
            AttributeSet attrs )
        {
            super( context, attrs );
            final int gravity = getGravity();
            if ( Gravity.isVertical( gravity )
                && ( gravity & Gravity.VERTICAL_GRAVITY_MASK ) 
                == Gravity.BOTTOM )
            {
                setGravity( 
                    ( gravity & Gravity.HORIZONTAL_GRAVITY_MASK )
                        | Gravity.TOP );
                topDown = false;
            }
            else
            {
                topDown = true;
            }
        }

        @Override
        protected void onMeasure( int widthMeasureSpec, 
            int heightMeasureSpec )
        {
            super.onMeasure( heightMeasureSpec, 
                widthMeasureSpec );
            setMeasuredDimension( getMeasuredHeight(), 
                getMeasuredWidth() );
        }

        @Override
        protected void onDraw( Canvas canvas )
        {
            TextPaint textPaint = getPaint();
            textPaint.setColor( getCurrentTextColor() );
            textPaint.drawableState = getDrawableState();

            canvas.save();

            if ( topDown )
            {
                canvas.translate( getWidth(), 0 );
                canvas.rotate( 90 );
            }
            else
            {
                canvas.translate( 0, getHeight() );
                canvas.rotate( -90 );
            }

            canvas.translate( getCompoundPaddingLeft(), 
                getExtendedPaddingTop() );

            getLayout().draw( canvas );
            canvas.restore();
        }
    }

4) 更改 res/layout/main.xml 中的主布局以包含一个 VerticalTextView 控件:

<com.stylingandroid.verticaltext.VerticalTextView
    style="@style/verticalTextStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="bottom|right"
    android:text="@string/text" />

5) 结果

来源:http://blog.stylingandroid.com/archives/796

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-09-15
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 2018-01-16
相关资源
最近更新 更多