android - Android中动态创建的UI组件的文本大小

标签 android

我的 Activity 中有一个 TableLayout。这是其中的一行。

    <TableRow
        android:id="@+id/row"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/date_won"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/date_won"
            android:textColor="@color/white"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/prize_won"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/amount_won"
            android:textColor="@color/white"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/claimed_or_not"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/claimed_or_not"
            android:textColor="@color/white"
            android:textSize="12sp" />
    </TableRow>

    <TableRow
        android:id="@+id/row_content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:gravity="center_horizontal" >

        <TextView
            android:id="@+id/date_won_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hyphen"
            android:textColor="@color/white"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/prize_won_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hyphen"
            android:textColor="@color/white"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/claimed_or_not_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hyphen"
            android:textColor="@color/white"
            android:textSize="12sp" />
    </TableRow>

以下代码在运行时根据数据库表中的行数添加表行。

    luckyDrawHisotry = (TableLayout) findViewById(R.id.table);
    contentRow = (TableRow) findViewById(R.id.row_content);     
    LayoutParams contentRowLayoutParams = contentRow.getLayoutParams();
    dateText = (TextView) findViewById(R.id.date_won_content);
    LayoutParams dateLayoutParams = dateText.getLayoutParams();
    prizeText = (TextView) findViewById(R.id.prize_won_content);
    LayoutParams prizeLayoutParams = prizeText.getLayoutParams();
    claimedOrNot = (TextView) findViewById(R.id.claimed_or_not_content);
    LayoutParams claimedLayoutParams = claimedOrNot.getLayoutParams();

            if (prizeDao.loadAll().size() > 0) {
        Prize prize = prizeDao.loadAll().get(0); 
        dateText.setText(Utils.stringFromDate(prize.getWinningDate()));
        prizeText.setText(prize.getPrizeName());
        if(prize.getPrizeRecieved())
            claimedOrNot.setText("yes");
        else
            claimedOrNot.setText("no");
    } 

    if (prizeDao.loadAll().size() > 1){     
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int pixelSize = (int) (12 * dm.scaledDensity);
        for (int i = 1; i < prizeDao.loadAll().size(); i++) {
            Prize prize = prizeDao.loadAll().get(i); 
            TableRow row = new TableRow(this); 
            lastRowId = lastRowId + 10;
            row.setLayoutParams(contentRowLayoutParams);
            row.setId(lastRowId);
            TextView dText = new TextView(this);
            dText.setLayoutParams(dateLayoutParams);
            dText.setTextSize(pixelSize);
            dText.setTextColor(getResources().getColor(R.color.white));
            TextView pText = new TextView(this);
            pText.setLayoutParams(prizeLayoutParams);
            pText.setTextSize(pixelSize);
            pText.setTextColor(getResources().getColor(R.color.white));
            TextView cText = new TextView(this);
            cText.setLayoutParams(claimedLayoutParams);
            cText.setTextSize(pixelSize);
            cText.setTextColor(getResources().getColor(R.color.white));
            dText.setText(Utils.stringFromDate(prize.getWinningDate()));
            pText.setText(prize.getPrizeName());
            if(prize.getPrizeRecieved())
                cText.setText("yes");
            else
                cText.setText("no");
            row.addView(dText);
            row.addView(pText);
            row.addView(cText);
            luckyDrawHisotry.addView(row);
        }
    }

我在 xml 文件中为表创建了第一行,以便我可以比较动态创建的行和创建为 xml 的行。

结果如下。

enter image description here

如您所见,代码添加的行比xml创建的行大。我做错了什么吗?

最佳答案

你想要12dip

float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12, 
                                        getResources().getDisplayMetrics());

来自 TypedValue.applyDimension 的文档

Converts an unpacked complex data value holding a dimension to its final floating point value. The two parameters unit and value are as in TYPE_DIMENSION.

编辑:直到现在我才意识到您在布局中使用了 sp。要获得 12sp,您应该只将第一个参数更改为:COMPLEX_UNIT_SP

float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12, 
                                        getResources().getDisplayMetrics());

您还可以使用带有两个参数的 setTextSize:

setTextSize( TypedValue.COMPLEX_UNIT_PX, 12);

第一个是单位。您可以找到文档 here

关于android - Android中动态创建的UI组件的文本大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22483219/

相关文章:

android - 在同一个类中将处理程序与异步任务一起使用是否正确?

android - Activity 与 fragment

android - 尝试使软键盘输入按钮说搜索或显示搜索放大镜并处理其对 EditText 的点击

android - 为什么我的 Android 手机布局与我在 Android Studio 上的布局不同?

android - iPhone麦克风的硬件限制

android - 将数据发送到堆栈中的前一个 fragment

javascript - window.onbeforeunload 在 Android Chrome 上不会触发 [alt.解决方案?]

java - 在单个页面上显示每个 child 的数据

java - junit 3 的故障跟踪窗口不显示预期值

java - Android proguard 与 volley : ClassNotFoundException: Didn't find class "com.android.volley.VolleyLog"