Cla*_*aes 38 android vertical-alignment textview drawable android-layout
我想创建一个布局,将图像的顶部与TextView的顶部对齐,如下所示:
--------- Text text text text text text text
| Image | text text text text text text text
--------- text text text text text text text
text text text text text text text
text text text text text.
Run Code Online (Sandbox Code Playgroud)
我尝试通过设置android:drawableLeft
我的图像来做到这一点,但是它将图像垂直居中:
Text text text text text text text
--------- text text text text text text text
| Image | text text text text text text text
--------- text text text text text text text
text text text text text.
Run Code Online (Sandbox Code Playgroud)
仅使用TextView是否可行,还是需要创建包含TextView和ImageView的RelativeLayout?
这是我的TextView的XML布局,它给出了错误的布局:
<TextView
android:gravity="top"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/image"
android:drawablePadding="8dp"
android:text="@string/text" />
Run Code Online (Sandbox Code Playgroud)
该android:gravity="top"
属性似乎只影响文本,而不是drawable.
Rei*_*ier 29
您可以通过创建包装Drawable的自定义Drawable将Compound-Drawable对齐到顶部(或底部),然后通过覆盖方法来操纵自定义Drawable的绘图onDraw(Canvas)
.
下面的示例是最简单的示例.这会将图像与顶部对齐,但您也可以通过在onDraw(Canvas)
-method中实现所需的逻辑使其与TextView的底部,左侧或右侧对齐.您可能还希望在其中构建一个边距onDraw(Canvas)
,以使您的设计实现像素完美.
样品用法:
GravityCompoundDrawable gravityDrawable = new GravityCompoundDrawable(innerDrawable);
// NOTE: next 2 lines are important!
innerDrawable.setBounds(0, 0, innerDrawable.getIntrinsicWidth(), innerDrawable.getIntrinsicHeight());
gravityDrawable.setBounds(0, 0, innerDrawable.getIntrinsicWidth(), innerDrawable.getIntrinsicHeight());
mTextView.setCompoundDrawables(gravityDrawable, null, null, null);
Run Code Online (Sandbox Code Playgroud)
示例代码:
public class GravityCompoundDrawable extends Drawable {
// inner Drawable
private final Drawable mDrawable;
public GravityCompoundDrawable(Drawable drawable) {
mDrawable = drawable;
}
@Override
public int getIntrinsicWidth() {
return mDrawable.getIntrinsicWidth();
}
@Override
public int getIntrinsicHeight() {
return mDrawable.getIntrinsicHeight();
}
@Override
public void draw(Canvas canvas) {
int halfCanvas= canvas.getHeight() / 2;
int halfDrawable = mDrawable.getIntrinsicHeight() / 2;
// align to top
canvas.save();
canvas.translate(0, -halfCanvas + halfDrawable);
mDrawable.draw(canvas);
canvas.restore();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19084 次 |
最近记录: |