Android 动态设置view的id,id设置为数字

本文介绍了在Android SDK 17及以上版本中动态为View设置ID的方法,包括使用View.generateViewId()、XML配置文件及注解的方式,并提供了解决方案以确保应用的兼容性。

问题
动态给view设置id的时候会遇到以下错误。
这里写图片描述

因为在sdk17(4.2.2)以上可以使用myView.setId(View.generateViewId())才行,为了兼容,里面的id必须使用静态int类型。

解决方案
1、sdk17(4.2.2以上)

//设置View.generateViewId()
simpleDraweeViewicon.setId(View.generateViewId());

2、写在配置xml文件里

这里写图片描述

ids.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <item name="layoutadd" type="id"/>
</resources>

代码中设置

AppRelativelayout mRelative = new AppRelativelayout(mContext);
mRelative.setId(R.id.layoutadd);

3、使用注解帮你搞定
将你所想定义的id按照下例写在代码中:

@android.support.annotation.IdRes
   int TAG1401 = 1000;
   int TAG1402 = 1001;
   int TAG1403 = 1002;
   int TAG1404 = 1003;
   int TAG1405 = 1004;
   int TAG1406 = 1005;
   int TAG1407 = 1006;

在想要设置id的地方直接设置:

AppRelativelayout mRelative = new AppRelativelayout(mContext);
mRelative.setId(TAG1401);`这里写代码片`

这里写图片描述

原文链接:这里写链接内容

Android动态设置 View 的 marginTop 可通过以下几种常见方法实现: ### 使用 LayoutParams 若要动态设置 View 的 marginTop,可借助 View 的 LayoutParams 来达成。不同的布局管理器对应不同的 LayoutParams 类,以下是一些常见布局管理器的示例: #### LinearLayout ```java import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取要设置 margin 的 View View targetView = findViewById(R.id.target_view); // 获取当前的 LayoutParams LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) targetView.getLayoutParams(); // 设置新的 marginTop 值(这里假设设置为 20dp) int marginTopInDp = 20; float density = getResources().getDisplayMetrics().density; int marginTopInPixels = (int) (marginTopInDp * density); layoutParams.topMargin = marginTopInPixels; // 应用新的 LayoutParams targetView.setLayoutParams(layoutParams); } } ``` #### RelativeLayout ```java import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取要设置 margin 的 View View targetView = findViewById(R.id.target_view); // 获取当前的 LayoutParams RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) targetView.getLayoutParams(); // 设置新的 marginTop 值(这里假设设置为 30dp) int marginTopInDp = 30; float density = getResources().getDisplayMetrics().density; int marginTopInPixels = (int) (marginTopInDp * density); layoutParams.topMargin = marginTopInPixels; // 应用新的 LayoutParams targetView.setLayoutParams(layoutParams); } } ``` ### 使用 ConstraintLayout ```java import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取 ConstraintLayout ConstraintLayout constraintLayout = findViewById(R.id.constraint_layout); // 获取要设置 margin 的 View View targetView = findViewById(R.id.target_view); // 创建 ConstraintSet ConstraintSet constraintSet = new ConstraintSet(); constraintSet.clone(constraintLayout); // 设置新的 marginTop 值(这里假设设置为 40dp) int marginTopInDp = 40; float density = getResources().getDisplayMetrics().density; int marginTopInPixels = (int) (marginTopInDp * density); constraintSet.setMargin(targetView.getId(), ConstraintSet.TOP, marginTopInPixels); // 应用新的约束 constraintSet.applyTo(constraintLayout); } } ``` ### 原理说明 在 Android 里,View 的布局参数由 LayoutParams 类掌控,不同的布局管理器有对应的 LayoutParams 子类。通过获取 View 当前的 LayoutParams,对其中的 topMargin 属性进行修改,再将修改后的 LayoutParams 重新应用到 View 上,就能动态设置 View 的 marginTop。对于 ConstraintLayout,要借助 ConstraintSet 类来设置约束和边距。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值