合計 4 つのテキストがあるボタンを使用してAndroidアプリケーションを作成し、最初の 2 つを揃えたいと考えています。
だからこれから:
setText(item.title + " " + item.roomId + "\n" + item.teacher + " "
+ item.classes);
これに:
setText(declare here a spannable);
私はSpannableAlignment.ALIGN_NORMAL
で作業する必要があると思います.andでいくつか試しましたAlignment.ALIGN_OPPOSITE
が、最初に下部テキストの長さを計算してから配置を行う必要があると思います. (ここで良い例を見つけましたが、私のセットアップでは機能しません)。
誰かが私を良い方向に向けてくれることを願っています。
編集:
RelativeLayout
私が使用できない(と思う)理由LinearLayout
は、別のクラスでボタンを拡張しているためです(ScheduleItemView.java
):
/**
* Custom view that represents a {@link ScheduleItem} instance, including its
* title and time span that it occupies. Usually organized automatically by
* {@link ScheduleItemsLayout} to match up against a {@link TimeRulerView}
* instance.
*/
public class ScheduleItemView extends Button {
private ScheduleItem mItem;
public ScheduleItemView(Context context, ScheduleItem item) {
super(context);
mItem = item;
setSingleLine(false);
setText(item.title + " " + item.roomId + "\n" + item.teacher + " "
+ item.classes);
// TODO: turn into color state list with layers?
int textColor = Color.WHITE;
int accentColor = item.accentColor;
LayerDrawable buttonDrawable = (LayerDrawable) context.getResources()
.getDrawable(R.drawable.btn_block);
buttonDrawable.getDrawable(0).setColorFilter(accentColor,
PorterDuff.Mode.SRC_ATOP);
buttonDrawable.getDrawable(1).setAlpha(item.containsStarred ? 255 : 0);
setTextColor(textColor);
setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources()
.getDimensionPixelSize(R.dimen.text_size_small));
setGravity(Gravity.CENTER | Gravity.BOTTOM);
setBackgroundDrawable(buttonDrawable);
}
public ScheduleItem getScheduleItem() {
return mItem;
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
measure(MeasureSpec.makeMeasureSpec(getMeasuredWidth(),
MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(
getMeasuredHeight(), MeasureSpec.EXACTLY));
// layout(getLeft(), getTop(), getRight(), getBottom());
setGravity(Gravity.CENTER);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(getRight() - getLeft(), getBottom() - getTop());
}
}
私はprotected void onLayout
(ScheduleItemsLayout.java
)でこれをやろうとしました:
child.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
しかし、それはうまくいきません。を使用する必要があるかどうかわかりませんnew RelativeLayout(this)
。
Spannable
この場合は使った方が良いですか?
プロジェクトのソースはここからダウンロードできます(Eclipse にインポートできます)。