android - 以编程方式设置 LayoutParams

标签 android

我将游戏内聊天模块放入应用中。我正在将收到的文本消息添加到 LinearLayout View 中。我想将布局参数设置为 TextView,但以下代码崩溃了,错误消息让我感到困惑。

private void addChat(String chat, String when,  Boolean mine) {
    int leftMargin;

    TextView tv = new TextView(this);
    llview.addView(tv);
    tv.setTextColor(Color.WHITE);
    tv.setTextSize(2,25);
    tv.setText(chat);
    if (mine) {
        leftMargin = 5;
        tv.setBackgroundColor(0x7C5B77);
    }
    else {
        leftMargin = 50;
        tv.setBackgroundColor(0x778F6E);
    }
    final ViewGroup.MarginLayoutParams lpt =(MarginLayoutParams)tv.getLayoutParams();
    lpt.setMargins(leftMargin,lpt.topMargin,lpt.rightMargin,lpt.bottomMargin);

    tv.setLayoutParams(new ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT));

}

当它运行时,上述所有代码都会执行,但它在 android 运行时崩溃为:

03-13 14:15:38.513: E/AndroidRuntime(12985): java.lang.ClassCastException:      android.view.ViewGroup$LayoutParams

并使用调试器单步执行,它实际上会处理所有这些行

但在尝试使用同样神秘的异常详细消息进行渲染时会出错:

android.view.ViewGroup$LayoutParams

那么,为了达到这个状态做了什么?我应该怎么做才能交替左/右缩进消息?

最佳答案

只需从底部替换并添加此

tv.setLayoutParams(new ViewGroup.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT,
    ViewGroup.LayoutParams.WRAP_CONTENT));

之前

llview.addView(tv);

关于android - 以编程方式设置 LayoutParams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9678785/

相关文章:

android - 在android中加载flash文件(.swf)webview

android - 你能在你的android上升级sqlite3版本吗?

java - 获取页面适配器内的屏幕尺寸?

php - 创建 PHP 页面的自定义响应

android - 使用 MutableLiveData,将数据从 Activity 更新到 Fragment

android - 在 recyclerview 中只显示一条评论 - Firebase

javascript - 链接或 Javascript fragment 从 android 强制门户浏览器上的链接打开外部应用程序

android - 强制我的 Activity 前景?

Android sqlite 选择带计数的子查询

android - 如何在android中中止BroadcastReceiver