天道酬勤,学无止境

Android 以编程方式创建 ID [重复](Android create ID programmatically [duplicate])

问题

我正在寻找在不使用 XML 声明的情况下在代码中创建 ID。 例如,我有代码,我在其中以编程方式创建这样的视图

@Override
protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setContentView(R.layout.new_layout);

  LinearLayout ll = (LinearLayout)findViewById(R.id.layout);
  View v = new View(this);
  v.setBackgroundColor(0xFFFF0000);
  ll.addView(v, 100, 100);

}

我可以添加v.setId(50) ,但我想添加v.setId(R.id.some_id)并且我不想将some_id添加到xml文件中,我知道这个选项。

我的问题是,如何以编程方式创建R.id.some_id而不在 XML 文件中设置它。 谢谢

回答1

参考这个奇妙的答案:https://stackoverflow.com/a/13241629/586859

R.* 引用显式用于访问资源。 您尝试做的事情实际上不太可能,但也许您可以从上面的答案中找到类似以下部分的内容:

保留一个 XML android:id以在代码中使用

如果您的ViewGroup无法通过 XML 定义(或者您不希望它被定义),您可以通过 XML 保留 id 以确保它保持唯一:

这里, values/ids.xml定义了一个自定义id

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

然后一旦创建了 ViewGroup 或 View,您就可以附加自定义 id

myViewGroup.setId(R.id.reservedNamedId);
标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • android保存以编程方式创建的视图(android save programmatically created views)
    问题 我以编程方式创建了一个带有其他一些视图的 RelativeLayout 并将其添加到在 XML 中定义的父级。 但是在重新创建活动后,以编程方式创建的所有视图(包括布局)都消失了。 我需要一个 SharedPreferences 对象来保存值然后重新创建布局还是有更简单的方法来保存它? PS 所有新创建的视图都会分配一个 id 回答1 我是否需要一个 SharedPreferences 对象来保存值然后重新创建布局 您说您正在onResume()中创建这些小部件。 onResume()代码需要知道需要创建哪些小部件。 如果这纯粹是瞬态信息,并且您担心由于屏幕旋转或其他配置更改而导致 Activity 被破坏和重新创建之类的事情,请在 Activity 或片段上使用onSaveInstanceState()以从旧的组件传递有关这些小部件的数据到活动的新实例。 另一方面,如果您担心几个月后能够重新创建这些视图,则需要持久存储这些信息: SharedPreferences 、数据库、其他一些文件结构、“云”等。 回答2 我建议您查看Activity.onSaveInstanceState(Bundle) : 默认实现通过在层次结构中具有 id 的每个视图上调用 onSaveInstanceState() 并保存当前聚焦视图的 id
  • 如何以编程方式在按钮上设置标签 [重复](How to set tag on a Button programmatically [duplicate])
    问题 这个问题在这里已经有了答案: 以编程方式设置按钮 ID (6 个回答) 4年前关闭。 在 XML 上,我可以在 android:tag 上设置我的标志,但是我如何在语法上做到这一点? <Button android:layout_width="match_parent" android:layout_height="50dp" android:text="Button" android:tag="myFlag"/> 回答1 给视图添加一个 id <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="50dp" android:text="Button"/> 在代码中,您可以获取/设置标签 Button button = (Button) findViewById(R.id.button); // set tag button.setTag("myFlag"); // get tag String tag = (String) button.getTag(); 回答2 要为视图设置标签,请调用view.setTag(tagvalue) button1.setTag(1); 要获取视图的标签,请调用view.getTag() button1
  • 如何以编程方式创建Android主题样式?(How to programmatically create an Android theme style?)
    问题 有很多关于通过XML创建或自定义Android主题样式的文档和教程,但还没有找到在代码中创建它的方法。 关于如何在代码而不是xml中创建样式的任何想法? 这是示例XML,需要在代码中以编程方式创建此代码: <resources> <style name="AppTheme" parent="android:Theme.Material"> <item name="android:colorPrimary">@color/primary</item> <item name="android:colorPrimaryDark">@color/primary_dark</item> <item name="android:colorAccent">@color/accent</item> </style> </resources> 回答1 简短的答案:如果没有主题资源ID,就不可能以编程方式创建主题并将其设置为应用程序主题(即使我们实现了创建Theme对象)。 细节: 当您调用setTheme函数影响一个ContextWrapper方法时,该方法最后使用资源ID指针调用AssetManager , AssetManager类保留应用应用程序主题的方法,即JNI调用 native static final void applyThemeStyle(long theme, int
  • 如何将片段添加到以编程方式生成的布局?(How to add a fragment to a programmatically generated layout?)
    问题 我可以使用以下代码来生成片段,但前提是要将片段添加到XML文件中存在的线性布局中。 LinearLayout fragmentsLayout = (LinearLayout) findViewById(R.id.foodItemActvity_linearLayout_fragments); FragmentManager fragMan = getFragmentManager(); FragmentTransaction fragTransaction = fragMan.beginTransaction(); Fragment myFrag= new ImageFragment(); fragTransaction.add(R.id.foodItemActvity_linearLayout_fragments, myFrag , "fragment" + fragCount); fragTransaction.commit(); 现在,如果我想将该片段添加到XML文件中尚不存在的线性布局中,该怎么办? LinearLayout rowLayout = new LinearLayout(); 第2部分: Fragment frag1 = generateAppropriateFragment(type1); Fragment frag2 =
  • Android 以编程方式创建 ViewPager(Android create ViewPager programmatically)
    问题 我以编程方式创建了一个视图寻呼机,并将这个视图寻呼机添加到布局中,但它没有运行。 ViewPager viewPager = new ViewPager(this); viewPager.setAdapter(new MyPagerAdapter()); addView(viewPager); 视图寻呼机不工作; 但是当我从 XML 使用它时,它工作正常。 我想动态使用它。 回答1 请同时发布“addView”方法的代码。 现在我只建议向 viewPager 添加一些布局属性,如宽度和高度。 更新:好的,我刚刚在我的项目中遇到了这个问题。 您必须为 viewPager 设置的唯一属性是 id。 如何在没有在 xml 文件中定义组件的情况下获取唯一 id(在 R 类中生成)写在这里:Android: View.setID(int id) programmatically - 如何避免 ID 冲突? (在 res/values 答案中带有 ids.xml 的帖子)。 回答2 使用 FragmentActivity 创建 viewPager 和 new MyPagerAdapter( getSupportFragmentManager());
  • 如何在Android中不使用XML的情况下以动态方式和编程方式应用FontSize? [复制](How to apply FontSize dynamically and programmatically without using XML in Android? [duplicate])
    问题 这个问题已经在这里有了答案: 8年前关闭。 可能重复: 如何以编程方式(Android)在整个应用程序中更改字体大小? 这是我的代码:我创建了带有FontSize选项列表的Spinner。 如果我单击FontSize“ 26”,那么它应该能够在该特定FontSize中进行更改。 下面我有一个EditBox。 因此,如果我单击Fontsize(字体大小)为40,并且字体比通常的Bold斜体。 因此,我应该可以在EditBox内输入以下选定的“ Font”:FontSize“ 40”和斜体样式。 如何在Android中以编程方式执行此操作? font=new Spinner(con); option= new String[] {"Select Font Size","8","10","12","14","16","18","20", "22","24","26","28","30","32","34","36","38","40","50"}; ArrayAdapter<String> adapter= new ArrayAdapter<String>(con,android.R.layout.simple_spinner_dropdown_item,option); adapter.setDropDownViewResource(android.R.layout.simple
  • 以编程方式创建的网格视图内容的文本颜色(Text color by programmatically created grid view content)
    问题 我了解如何在设计视图中执行此操作,但我不确定如何基于以编程方式创建的元素创建样式。 我遵循了教程,这就是我所在的位置: 我有一个由字符串数组填充的网格视图,如下面的代码所示: ... gridView = (GridView) findViewById(R.id.gridView); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strData); gridView.setAdapter(adapter); 字符串数组的每个元素都可以很好地填充网格。 我将如何设置添加到 gridView 的项目的文本颜色? 回答1 2个解决方案:动态或自定义布局。 动态:当您覆盖 ArrayAdapter 中的getView()方法时,您可以使用setTextColor(...)设置文本颜色,如下所示: gridview.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strData) { @Override public View getView(int position, View convertView, ViewGroup
  • 以编程方式更改按钮可绘制[重复](Change Button Drawable Programmatically [duplicate])
    问题 这个问题在这里已经有了答案: 如何以编程方式在 Android 按钮上设置 drawableLeft? (14 个回答) 4年前关闭。 我有一个可绘制左侧的按钮: <Button android:id="@+id/post_feeling_btn" android:background="@color/white" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="4dp" android:drawableLeft="@drawable/feeling_btn" android:gravity="left|center_vertical" android:textColor="@color/gray" android:text="Sentimento"/> 在我的 on resume 方法中,我以编程方式更改按钮的文本: Button setFeeling; FeelingButton selectedFeeling; @Override public void onResume() { super.onResume(); selectedFeeling = ((FeedActivity)getActivity())
  • 如何以编程方式创建 DrawerLayout(How to create DrawerLayout programmatically)
    问题 我想在我的主要活动中将此 xml 转换为 java,输出是导航抽屉。 我只需要这部分的帮助,我完成了剩下的部分。 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <FrameLayout android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" > </FrameLayout> <ListView android:id="@+id/drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start"
  • Android:以编程方式创建的图像与资源图像(Android: programmatically created image vs resource image)
    问题 1)是否可以创建drawable,示例 static Bitmap.Config conf = Bitmap.Config.ARGB_8888; static Bitmap bmp = Bitmap.createBitmap(100, 100, conf); // something draw // eventually convert to DrawableBitmap 然后将其转换为 / 分配为 / 放入资源中,以在具有资源 ID 参数的函数中使用,例如: public void setWidgetLayoutResource (int widgetLayoutResId) 或者 2)是否可以在 R.drawable.something.bmp 中动态绘制以更改图像? 所有这些都是为了将​​ setWidgetLayoutResource() 中小部件的颜色更改为任何颜色,而不是固定为具体资源的颜色 回答1 我自己的回答 这个问题是相对于我的另一个问题:Android PreferenceScreen,我是这样做的: 颜色线视图.java public class ColorLinesView extends View { private static GradientDrawable gdDefault = new GradientDrawable(); public
  • 以编程方式添加的联系人在 Android 中不可见 [重复](Programmatically added Contact is not visible in Android [duplicate])
    问题 这个问题在这里已经有了答案: 9年前关闭。 可能的重复: 如何以编程方式添加联系人? 在谷歌搜索的帮助下,我能够在我的 Android 应用程序中添加一个联系人。 虽然这有效,但我无法在电话联系人列表(电话簿)中看到添加的联系人。 你能帮我解决这个问题吗? 我不知道在哪里看,这可能是版本问题吗? 如果遇到此问题的人愿意帮助我,我将不胜感激。 我在设置我的代码时遵循了这个例子。 回答1 使用以下方法将新联系人插入电话簿: public void insert(String lastName, String firstName, String phoneNumber, String photo_uri) { ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI); builder.withValue(RawContacts.ACCOUNT_TYPE, null); builder.withValue(RawContacts.ACCOUNT_NAME, null); ops.add(builder.build())
  • 在 Android 上使用 XML 以编程方式创建视图(Create views programmatically using XML on Android)
    问题 我想在 XML 中创建一个 UI 布局,并将其作为子项插入到现有视图中(它将被多次插入)。 例如,以下是 XML 文件将包含的内容: <RelativeLayout android:id="@+id/relativeLayout1" > <Button android:id="@+id/myButton" android:text="@string/mystring" /> </RelativeLayout> 现在我得到了父LinearLayout ,现在想将该 XML 文件添加为子视图,例如: LinearLayout linear = (LinearLayout) findViewById(R.id.myLayout); // need to create a view object from the xml file linear.addView(myXmlObject); 是否可以将 XML 资源转换为视图类型? 如果是这样,我将如何做到这一点? 回答1 我相信你想要 LayoutInflater。 假设您的示例 XML 位于文件custom_layout.xml : LayoutInflater inflater = LayoutInflater.from(context); RelativeLayout layout = (RelativeLayout)
  • 在 android 中以编程方式创建布局 - 问题(Create Layout Programmatically in android - issue)
    问题 我正在使用以下代码动态创建 FrameLayout 我的布局 FrameLayout layout = new FrameLayout(this); FrameLayout.LayoutParams layoutparams=new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.FILL_PARENT,Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL); layout.setLayoutParams(layoutparams); webview=new WebView(this); webview.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT)); splashview=new ImageView(this); splashview.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup
  • 如何在android中以编程方式创建的Imageview上实现双指缩放? [复制](how to implement pinch zooming on a programmatically created Imageview in android? [duplicate])
    问题 这个问题在这里已经有了答案: 8年前关闭。 可能的重复: android多点触控图像缩放? 如何在 android 中以编程方式创建的 Imageview 上实现双指缩放? 回答1 看到这个:http://vivin.net/2011/12/04/implementing-pinch-zoom-and-pandrag-in-an-android-view-on-the-canvas/ 以及如何获得图像的缩放功能? 另见:http://androidtrainningcenter.blogspot.se/2012/04/pinching-zoom-in-android-image-view-or.html 和:http://www.mysecretroom.com/www/programming-and-software/android-multi-touch-handling
  • Android:通过数组以编程方式创建微调器(Android: Create spinner programmatically from array)
    问题 我是Android的新手,我正在尝试以编程方式创建一个微调器,并向其提供来自数组的数据,但是Eclipse会警告我无法处理。 这是我得到的: 此ArrayList包含应该位于微调器中的元素(稍后从文件中填充): ArrayList<String> spinnerArray = new ArrayList<String>(); 这是我在应该创建微调器的网站上找到的代码: Spinner spinner = new Spinner(this); ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, spinnerArray); spinner.setAdapter(spinnerArrayAdapter); 现在,第二行(ArrayAdapter ...)在Eclipse中向我发出警告,提示"ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized" ,我不知道如何解决此问题(或如何解决)首先意味着:))。 这只是一个警告,该应用程序似乎可以正常运行,但是我仍然想了解问题所在并进行修复。
  • 如何以编程方式创建admob标语?(How to create an admob banner programmatically?)
    问题 如何使用代码创建admob智能横幅? 我的布局完全是用代码构建的。 回答1 您可以像这样或多或少地做到这一点: LinearLayout adContainer = <container>; AdView adView = new AdView(activity) adView.setAdSize(AdSize.SMART_BANNER); adView.setAdUnitId(<your-publisher-id>); // Initiate a generic request to load it with an ad AdRequest adRequest = new AdRequest(); adRequest.addTestDevice(AdRequest.TEST_EMULATOR); adView.loadAd(adRequest); // Place the ad view. LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); adContainer.addView(adView, params); 干杯 回答2 将此添加到您的活动中 //Add this in
  • 如何在 DialogBox 内以编程方式创建 Edittext 取决于数组大小?(How to create Edittext programmatically inside of DialogBox depends on Array size?)
    问题 我创建了带有 4 个 EditText 的对话框。 但是现在我需要通过动态依赖 API 响应 JsonObject 计数来做到这一点。 这是我的回应: { "additional_charges":{ "1":"121324324", "2":"245657687", "3":"379809733", "4":"4467797894" } } 如果“additional_charges”有“1”、“2”、“3”---> 我必须显示 3 个 Edittext。 如果“additional_charges”有“1”、“2”、“3”、“4” ---> 我必须在对话框中显示 4 个 Edittext。 这该怎么做? 对话框.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fare_id" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/white" android:orientation="vertical"> <TextView android:id="@+id/currentlocTxt"
  • 适用于Android的Facebook SDK-以编程方式设置应用程序ID(Facebook SDK for Android - set Application ID programmatically)
    问题 我有一个本机Android应用程序,需要根据可以在运行时更改的应用程序设置连接到其他Facebook应用程序(不同的应用程序ID)。 想象一下,可以将应用设置为指向DEV,TEST或PROD。 当指向DEV时,FB应用程序ID应该为“ 1”。 当指向“测试”时,FB应用程序ID应该为“ 2”。 等等。 问题是来自Facebook SDK的UiLifecycleHelper在onCreate阶段自动从AndroidManifest.xml读取“ com.facebook.sdk.ApplicationId”。 似乎没有办法以编程方式设置此设置。 是否可以在运行时使用UiLifecycleHelper并指向其他应用程序ID,还是必须回过头来手动管理会话? 回答1 您好,我所知道的所有答案都适用于older sdk version ,但在facebook sdk 4中没有Session类 您只需使用以下单行代码即可: FacebookSdk.setApplicationId(APP_ID); 谢谢! 回答2 这是我用来以编程方式设置应用程序ID的内容 private Session.StatusCallback statusCallback = new SessionStatusCallback(); protected void onCreate(Bundle
  • 通过Android中的drawable以编程方式创建textview背景(Programmatically create textview background from drawable in Android)
    问题 我必须在Android TextView上以编程方式设置背景 我使用下面的代码。 它不起作用,并且还给了我nullpointerexception错误。 best_deals = (TextView) findViewById(R.id.bestdeals); best_deals.setBackground(getResources().getDrawable( R.drawable.headerradius)); 但是我必须把这些 best_deals.setTextColor(Color.parseColor("#be2351")); 表示它正在工作 上面的代码有什么问题? 这是我的header_redius.xml : <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="10dp"> <solid android:color="#000000"/> <corners android:radius="15dp" /> <gradient android:startColor="#434343" android:centerColor="#434343" android:endColor="#434343"
  • Android:以编程方式向布局添加按钮(Android: programmatically adding buttons to a layout)
    问题 我试图获得一个添加按钮,以基于按钮左侧的edittext在布局中添加另一个按钮。 关键是要一个人列出他们房间中的房间,然后当他们在每个房间中键入内容时,会生成一个新按钮,以便他们可以单击房间,然后开始在下一页上工作。 我已经完成了一个xml布局,然后我意识到我正在“以编程方式”添加按钮,所以我以编程方式重新布局,然后在switch / case中(这就是我的onclicks方式)添加尝试添加的add按钮一个视图按钮,但是它变得非常棘手。 我想在edittext下方添加一个滚动视图并添加按钮,然后当他们将所有房间添加到他们的房间时,最终将在整个房间中使用可滚动的按钮列表进行填充。 有没有一种方法可以以编程方式将按钮添加到xml的布局中。 我本以为可以,但我尝试的一切都无法正常工作。 感谢大家的帮助,您的任何建议将不胜感激。 首次编辑(针对Tanuj的解决方案) 我的XML文件(不确定我们要使用此文件还是仅使用Java): <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match