2016-12-09 15 views
-1

Android/Xamarinの文字列に一致するID名を取得する方法。 たとえば、string="name"がある場合、私は、例えばその名前と一致Resource.Designerのidを見つけたい:文字列に一致するビューIDを見つけるandroid

<ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/name"/> 

私はgetResources().getIdentifierと試みたが、それは常にnullを返します。

+3

'getResources()。getIdentifier'は正しいアプローチです。それをどうやって行うのかを示し、それを修正しようとします。 –

答えて

1

をお試しください:

EX:

var applicationNameId = Resources.GetIdentifier("ApplicationName", "string", this.PackageName); 

これはなるだろうstrings.xmlファイルのApplicationNameアイテムのリソースID。言い換えれば

<string name="ApplicationName">AppName</string> 

、私はこれが私を与え、同じintのための私のResource.Designer.csを検索識別子を取ることができるはずです。

ビュー+id/名前の識別子を取得したい場合は、代わりに次のない場合があります

EX:ButtonのリソースIDを取得します

var buttonNameId = Resources.GetIdentifier("MyButton", "id", this.PackageName);

Id:MyButton

<Button 
    android:id="@+id/MyButton" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/Hello" 
    /> 

しかし、ドキュメントに基づいて、名前ではなくIDでリソースを取得するよりもはるかに遅いので、これはお勧めしません。

注:この機能の使用はお勧めしません。名前よりも識別子でリソースを取得する方がはるかに効率的です。

https://developer.android.com/reference/android/content/res/Resources.html#getIdentifier(java.lang.String, java.lang.String, java.lang.String)

+0

この方法は何らかの理由で私にとっては役に立ちません。私はそれをImageViewに適用しようとしましたが、それはうまくいきませんでした。 –

+0

これは私がvarを試したものです。r1 = Resources.GetIdentifier( "name"、 "int"、this.PackageName); Android 5.0の場合 –

+0

何を検索していますか?私の例では、文字列リソースです。したがって、intの代わりにstringを使用する必要があります。 –

-1

あなたは文字列リソースのIDを取得したい場合は、あなたがResources.GetIdentifier()を使用する必要があり、この

var resourceId = (int)typeof(Resource.Id).GetField("name").GetValue(null); 
+1

誰もがこの質問に投票して、彼らが何をしているのか分からない。彼らがした場合、彼らは少なくともコメント理由を残すだろう。 –

+0

ここをクリックhttp://stackoverflow.com/questions/20354312/resources-getidentifier-returning-0-for-layout-android/25475419#25475419とこちらhttp://stackoverflow.com/questions/13038895/return-id-リソース名がわかっていればリソース名/ 13039419#13039419 –

関連する問題