android布局与中心文本和两个视图

时间:2014-08-05 08:24:08

标签: android android-layout android-relativelayout

我有布局显示这样的标题:

enter image description here

但是当居中文字很长时,视图就不好了。 这是发生的事情: enter image description here

如何得到这样的东西:

enter image description here

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent">

<View
    android:background="#0000CC"
    android:layout_width="fill_parent"
    android:layout_height="4dp"
    android:layout_alignParentLeft="true"
    android:layout_toLeftOf="@+id/headerTitle"
    android:layout_margin="4dp"
    android:visibility="invisible"
    android:layout_centerVertical="true" />

<TextView
    android:id="@+id/headerTitle"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:gravity="center"
    android:text="The quick brown fox jumps over the lazy dog"
    android:textSize="20sp"
    android:layout_gravity="center_vertical"
    android:layout_marginLeft="50dp"
    android:layout_marginRight="50dp"
    android:layout_marginTop="6dp"
    android:layout_marginBottom="6dp"
    android:layout_centerInParent="true" />

<View
    android:background="#CC0000"
    android:layout_width="fill_parent"
    android:layout_height="4dp"
    android:layout_alignParentRight="true"
    android:layout_toRightOf="@+id/headerTitle"
    android:layout_margin="4dp"
    android:layout_centerVertical="true" />

感谢您的帮助

UPD:最近的解决方案

我使用LinearLayout + layout_width =&#34; 0dp&#34;物品的+ layout_weight = 0.15 / 0.7 / 0.15。

3 个答案:

答案 0 :(得分:0)

从此链接获得答案

  

Justify text in an Android app using a WebView but presenting a TextView-like interface?

我承认,这让我神经紧张。我希望TextViews在代码中看起来像TextViews,即使我使用WebView作为实现text-align:justified格式化的方法,我也不会我想这样看。

我创建了一个自定义视图(丑陋,可能很糟糕),它实现了我在TextView中常用的方法,并修改了WebView的内容以反映这些更改。 对于其他人或我真正不知道的潜在危险它是有用的,对我来说它有效,我已经在几个项目中使用它并且没有遇到任何问题。唯一的小麻烦是我认为这是一个更大的收费记忆,但如果它只是一两个就没有什么可担心的(如果我错了,请纠正我)。

结果如下:

enter image description here

以编程方式设置它的代码就像这样简单:

 JustifiedTextView J = new JustifiedTextView();
                   J.setText("insert your text here");

当然,保留它是愚蠢的,所以我还添加了更改字体大小和字体颜色的方法,这些方法基本上都是我使用的TextViews。意思是我可以做这样的事情:

 JustifiedTextView J = new JustifiedTextView();
                   J.setText("insert your text here");
                   J.setTextColor(Color.RED);
                   J.setTextSize(30);

获得以下结果(图像被裁剪):

enter image description here

但是,这不是向我们展示它的外观,而是分享你是如何做到的!

我知道,我知道。 这是完整的代码。它还解决了设置透明背景和将UTF-8字符串加载到视图中时的问题。有关详细信息,请参阅reloadData()中的注释。

public class JustifiedTextView extends WebView{
    private String core      = "<html><body style='text-align:justify;color:rgba(%s);font-size:%dpx;margin: 0px 0px 0px 0px;'>%s</body></html>";
    private String textColor = "0,0,0,255";
    private String text      = "";
    private int textSize     = 12;
    private int backgroundColor=Color.TRANSPARENT;

    public JustifiedTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.setWebChromeClient(new WebChromeClient(){});
    }

    public void setText(String s){
        this.text = s;
        reloadData();
    }

    @SuppressLint("NewApi")
    private void reloadData(){

        // loadData(...) has a bug showing utf-8 correctly. That's why we need to set it first.
        this.getSettings().setDefaultTextEncodingName("utf-8");

        this.loadData(String.format(core,textColor,textSize,text), "text/html","utf-8");

        // set WebView's background color *after* data was loaded.
        super.setBackgroundColor(backgroundColor);

        // Hardware rendering breaks background color to work as expected.
        // Need to use software renderer in that case.
        if(android.os.Build.VERSION.SDK_INT >= 11)
            this.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
    }

    public void setTextColor(int hex){
        String h = Integer.toHexString(hex);
        int a = Integer.parseInt(h.substring(0, 2),16);
        int r = Integer.parseInt(h.substring(2, 4),16);
        int g = Integer.parseInt(h.substring(4, 6),16);
        int b = Integer.parseInt(h.substring(6, 8),16);
        textColor = String.format("%d,%d,%d,%d", r, g, b, a); 
        reloadData();
    }

    public void setBackgroundColor(int hex){
        backgroundColor = hex;
        reloadData();
    }

    public void setTextSize(int textSize){
        this.textSize = textSize;
        reloadData();
    }
}

答案 1 :(得分:0)

尝试像这样使用LinearLayout。希望它会对你有所帮助。

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

<View
    android:layout_width="match_parent"
    android:layout_height="4dp"
    android:layout_margin="4dp"
    android:layout_weight="1"
    android:background="#ffffff" />

<TextView
    android:id="@+id/headerTitle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:layout_weight="0.5"
    android:gravity="center"
    android:text="The quick brown fox jumps over the lazy dog"
    android:textColor="#ffffff"
    android:textSize="20sp" />

<View
    android:layout_width="match_parent"
    android:layout_height="4dp"
    android:layout_centerVertical="true"
    android:layout_margin="4dp"
    android:layout_toRightOf="@+id/headerTitle"
    android:layout_weight="1"
    android:background="#ffffff" />

</LinearLayout>

答案 2 :(得分:0)

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

<View
    android:background="#0000CC"
    android:layout_width="20dp"
    android:layout_weight="1"
    android:layout_gravity="center"
    android:layout_height="4dp"
    android:layout_margin="4dp" />

<TextView
    android:id="@+id/headerTitle"
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:layout_marginBottom="6dp"
    android:layout_marginLeft="50dp"
    android:layout_marginRight="50dp"
    android:layout_marginTop="6dp"
    android:gravity="center"
    android:text="The quick "
    android:textSize="20sp" />

<View
    android:background="#CC0000"
    android:layout_width="20dp"
    android:layout_weight="1"
    android:layout_gravity="center"
    android:layout_height="4dp"
    android:layout_margin="4dp" />

</LinearLayout>

试试这个