【问题标题】:Dynamically adding a Textview动态添加一个Textview
【发布时间】:2012-10-11 22:12:28
【问题描述】:

在布局文件中,我有以下内容:

    android:layout_width="100dp" 
    android:layout_height="wrap_content" android:layout_marginRight="10dp" 
    android:text="SYN" 
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:background="@drawable/rectanglepurple"
    android:textColor="#000000" 
    android:gravity="right"/>

我正在尝试使用代码实现以下目标,到目前为止我已经:

Resources res = getResources();
Drawable drawable1=res.getDrawable(R.drawable.rectanglepurple);

TextView idText = new TextView(getActivity());
    idText.setText("SYN");
    idText.setTextAppearance(getActivity(), android.R.style.TextAppearance_Medium);
    idText.setTextColor(Color.BLACK);
    idText.setGravity(Gravity.RIGHT);
    idText.setBackgroundDrawable(drawable1);

我无法锻炼如何应对

    android:layout_width="100dp" 
    android:layout_height="wrap_content" android:layout_marginRight="10dp" 

任何帮助表示赞赏。

【问题讨论】:

    标签: android android-layout textview


    【解决方案1】:

    这是 Android 布局的一个有趣部分。以 layout_ 为前缀的 XML 属性实际上用于包含视图管理器(如 LinearLayout 或 RelativeLayout)。所以你需要添加这样的东西:

    //convert from pixels (accepted by LayoutParams) to dp
    int px = convertDpToPixel(100, this);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(px, LinearLayout.LayoutParams.WRAP_CONTENT);
    //convert from pixels (taken by LayoutParams.rightMargin) to dp
    px = convertDpToPixel(10, this);
    params.rightMargin = px;
    idText.setLayoutParams(params);
    

    还有convertDpToPixel(从Converting pixels to dp 无耻地改编(更改为返回int 而不是float)):

    /**
    * This method converts dp unit to equivalent device specific value in pixels.
    *
    * @param dp      A value in dp(Device independent pixels) unit. Which we need to convert into pixels
    * @param context Context to get resources and device specific display metrics
    * @return An integer value to represent Pixels equivalent to dp according to device
    */
    public static int convertDpToPixel(float dp, Context context) {
        Resources resources = context.getResources();
        DisplayMetrics metrics = resources.getDisplayMetrics();
        int px = (int) (dp * (metrics.densityDpi / 160f));
        return px;
    }
    

    编辑:将 rightMargin 的赋值从 10(像素数)更改为变量 px(包含 10dp 中的像素数)whoopsie。

    【讨论】:

      【解决方案2】:

      你可能想看看

       setLayoutParams()
      

      TextView 类的方法。 -- android docu

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多