【发布时间】:2017-04-14 02:52:16
【问题描述】:
我在 xml 布局中有以下内容:
请注意六边形 #4 未与文本居中对齐。我该怎么做:这是我迄今为止尝试过的:
要真正获得带有 # 的视图,我会膨胀一个看起来像这样的视图:
//my_hexagon_button.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="0dp"
tools:ignore="MissingPrefix">
<Button
android:id="@+id/tv_icon"
fontPath="proxima_nova_semi_bold.otf"
android:layout_width="16dp"
android:layout_height="17.5dp"
android:layout_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:alpha=".25"
android:background="@drawable/hexagon"
android:clickable="true"
android:contentDescription="@string/content_description"
android:focusable="false"
android:padding="0dp"
android:text="4"
android:textColor="@color/white"
android:textSize="8dp"
/>
</LinearLayout>
膨胀视图后,我复制了它的绘图缓存并在 ImageSpan 中使用它。这是我获取绘图缓存副本的方法:
public Bitmap getIconBitmap() {
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout myRoot = new LinearLayout(getActivity());
// inflate and measure the button then grab its image from the view cache
ViewGroup parent = (ViewGroup) inflater.inflate(R.layout.my_hexagon_button, myRoot);
TextView tv = (TextView) parent.findViewById(R.id.tv_icon);
parent.setDrawingCacheEnabled(true);
parent.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
parent.layout(0, 0, parent.getMeasuredWidth(), parent.getMeasuredHeight());
parent.buildDrawingCache(true);
// if you need bounds on the view, swap bitmap for a drawable and call setbounds, im not using bounds
Bitmap b = Bitmap.createBitmap(parent.getDrawingCache());
parent.setDrawingCacheEnabled(false); // clear drawing cache
return b;
}
所以现在我有一个位图,看起来像我附加的图中的六边形 #4 图像。现在让我们在 ImageSpan 中使用它:
public Spannable createImageSpan(TextView tv,Bitmap bitmapIcon) {
Spannable span = new SpannableString(tv.getText());
int start = span.length() - 1;
int end = span.length();
ImageSpan image = new ImageSpan(new BitmapDrawable(getResources(), bitmapIcon),ImageSpan.ALIGN_BASELINE);
span.setSpan(image, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return span;
}
然后我只是在我的文本视图上设置了该跨度。也不要忘记在可绘制对象上设置边界,否则它不会显示,它会工作,但图像未在文本中对齐中心。注意它是如何下降到底部的。我怎样才能干净地解决这个问题?
【问题讨论】: