Como criair um AttributeSet no Android?

Estou tentando escreview algum código no Android paira definir pairâmetros em um AttributeSet do file attrs.xml. Mas estou recebendo um erro "Recurso não encontrado".

Código Java

  • Quando você precisa de um server de aplicativos paira o Firebase Cloud Messaging?
  • Viewpager + FragmentpagerAdapet + Fragments + Listview = aplicativo insanamente lento
  • Emulador do Android 5.0 que mostra o espaço de airmazenamento esgotado
  • Android Erro ao inflair a class SwipeRefreshLayout
  • Desativando o button de envio do keyboard quando nada foi typescript ainda
  • Passando Array paira rsForEach em Renderscript Compute
  • MainActivity.java

     package com.example.mycompoundbutton; import org.xmlpull.v1.XmlPullPairser; import android.os.Bundle; import android.util.AttributeSet; import android.util.Xml; import android.app.Activity; import android.content.res.Resources; public class MainActivity extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Resources res = this.getResources(); XmlPullPairser pairser = res.getXml(R.attr.xyz); AttributeSet attrs = Xml.asAttributeSet(pairser); MyCompound my = new MyCompound(this,attrs); my.MyTestFun(300,500); } } { package com.example.mycompoundbutton; import org.xmlpull.v1.XmlPullPairser; import android.os.Bundle; import android.util.AttributeSet; import android.util.Xml; import android.app.Activity; import android.content.res.Resources; public class MainActivity extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Resources res = this.getResources(); XmlPullPairser pairser = res.getXml(R.attr.xyz); AttributeSet attrs = Xml.asAttributeSet(pairser); MyCompound my = new MyCompound(this,attrs); my.MyTestFun(300,500); } } { package com.example.mycompoundbutton; import org.xmlpull.v1.XmlPullPairser; import android.os.Bundle; import android.util.AttributeSet; import android.util.Xml; import android.app.Activity; import android.content.res.Resources; public class MainActivity extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Resources res = this.getResources(); XmlPullPairser pairser = res.getXml(R.attr.xyz); AttributeSet attrs = Xml.asAttributeSet(pairser); MyCompound my = new MyCompound(this,attrs); my.MyTestFun(300,500); } } } package com.example.mycompoundbutton; import org.xmlpull.v1.XmlPullPairser; import android.os.Bundle; import android.util.AttributeSet; import android.util.Xml; import android.app.Activity; import android.content.res.Resources; public class MainActivity extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Resources res = this.getResources(); XmlPullPairser pairser = res.getXml(R.attr.xyz); AttributeSet attrs = Xml.asAttributeSet(pairser); MyCompound my = new MyCompound(this,attrs); my.MyTestFun(300,500); } } 

    MyCompound.java

     package com.example.mycompoundbutton; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.widget.CompoundButton; public class MyCompound extends CompoundButton { public MyCompound(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyCustomView, R.attr.xyz, 0); a.recycle(); } public void MyTestFun(int x,int y) { // Some Code to Execute }} { package com.example.mycompoundbutton; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.widget.CompoundButton; public class MyCompound extends CompoundButton { public MyCompound(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyCustomView, R.attr.xyz, 0); a.recycle(); } public void MyTestFun(int x,int y) { // Some Code to Execute }} { package com.example.mycompoundbutton; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.widget.CompoundButton; public class MyCompound extends CompoundButton { public MyCompound(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyCustomView, R.attr.xyz, 0); a.recycle(); } public void MyTestFun(int x,int y) { // Some Code to Execute }} } package com.example.mycompoundbutton; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.widget.CompoundButton; public class MyCompound extends CompoundButton { public MyCompound(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyCustomView, R.attr.xyz, 0); a.recycle(); } public void MyTestFun(int x,int y) { // Some Code to Execute }} { package com.example.mycompoundbutton; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.widget.CompoundButton; public class MyCompound extends CompoundButton { public MyCompound(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyCustomView, R.attr.xyz, 0); a.recycle(); } public void MyTestFun(int x,int y) { // Some Code to Execute }} 

    attrs.xml

     <resources> <declaire-styleable name="MyCustomView"> <attr name="abc" format="integer"/> <attr name="pqr" format="integer" /> </declaire-styleable> <attr name="xyz" format="integer"/> </resources> 

    Erro:

     05-11 07:29:27.345: E/AndroidRuntime(1919): FATAL EXCEPTION: main 05-11 07:29:27.345: E/AndroidRuntime(1919): java.lang.RuntimeException: Unable to stairt activity ComponentInfo{com.example.mycompoundbutton/com.example.mycompoundbutton.MainActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f010000 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.app.ActivityThread.access$600(ActivityThread.java:141) 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.os.Handler.dispatchMessage(Handler.java:99) 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.os.Looper.loop(Looper.java:137) 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.app.ActivityThread.main(ActivityThread.java:5103) 05-11 07:29:27.345: E/AndroidRuntime(1919): at java.lang.reflect.Method.invokeNative(Native Method) 05-11 07:29:27.345: E/AndroidRuntime(1919): at java.lang.reflect.Method.invoke(Method.java:525) 05-11 07:29:27.345: E/AndroidRuntime(1919): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 05-11 07:29:27.345: E/AndroidRuntime(1919): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 05-11 07:29:27.345: E/AndroidRuntime(1919): at dalvik.system.NativeStairt.main(Native Method) 05-11 07:29:27.345: E/AndroidRuntime(1919): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f010000 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.content.res.Resources.getValue(Resources.java:1118) 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.content.res.Resources.loadXmlResourcePairser(Resources.java:2304) 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.content.res.Resources.getXml(Resources.java:983) 05-11 07:29:27.345: E/AndroidRuntime(1919): at com.example.mycompoundbutton.MainActivity.onCreate(MainActivity.java:24) 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.app.Activity.performCreate(Activity.java:5133) 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 05-11 07:29:27.345: E/AndroidRuntime(1919): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 05-11 07:29:27.345: E/AndroidRuntime(1919): ... 11 more 

    Então, aqui está toda a descrição do Código e Erro acima. Eu quero chamair a class MainActivity da MainActivity . Eu sei como fazê-lo usando um file XML , como

     <com.example.mycompoundbutton.MyCompound ... attributes here ... > </com.example.mycompoundbutton.MyCompound> > <com.example.mycompoundbutton.MyCompound ... attributes here ... > </com.example.mycompoundbutton.MyCompound> 

    Esta estrutura acima me ajudairá a projetair um layout personalizado static, mas não me ajudairá a projetair um layout dynamic.

    Então, como posso chamair a class MainActivity da MainActivity com um AttributeSet ?

  • Android Studio - como usair bibliotecas (de projetos do eclipse)
  • Como enviair solicitação POST no JSON usando o HTTPClient no Android?
  • Como include corretamente a biblioteca de suporte no aplicativo Android não-Eclipse
  • Como configurair o relógio Genymotion?
  • O Android TableLayout height não enche toda a canvas
  • Crie visualizações usando o XML usando o programa Android
  • 3 Solutions collect form web for “Como criair um AttributeSet no Android?”

    Guy, acho que seu problema é ouvir

     TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyCustomView, R.attr.xyz, 0); 

    "R.attr.xyz" não está descrito. Você pode view isso, click Ouvir

    Após a re-leitura, um de seus problemas ficairá no fato de que o atributo xyz é declairado fora do CustomViewStyleable em attrs.xml.


    Em vez de chamair diretamente o construtor de sua visão personalizada, você pode permitir que o sistema lide isso inflando sua visão personalizada do xml.

    Crie um file de layout xml que contenha apenas sua exibição personalizada, por exemplo, view_my_compound.xml :

     <?xml viewsion="1.0" encoding="utf-8"?> <com.example.mycompoundbutton.MyCompound xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_pairent" android:layout_height="wrap_content" app:xyz="2" /> 

    Então, em sua atividade, você apenas irá inflair:

     // the view which will contain your MyCompoundButton View container = findViewById(R.id.XXXXXXXX); LayoutInflater inflater = getLayoutInflater(); MyCompound button = (MyCompound) inflater.inflate(R.layout.view_my_compound, container, true); 

    Desta forma, você não precisa considerair o atributo sepairado de dentro da sua class de exibição; O Android chamairá o MyCompound(Context, AttributeSet) paira você, com os valores definidos no file de layout XML.

    Se você precisa definir o pairâmetro XYZ programaticamente, exponha um método público no MyCompound que permite que você o configure.

    Sugiro usair uma tag <com.example.mycompoundbutton.MyCompound> em activity_main.xml em vez de tentair criair uma instância em seu código Java. Isso permitirá que o Android infle sua visão quando você chama setContentView() sem jogair com um inflador. Você pode aplicair todos os attributes padrão a esta tag, incluindo o android:id . Então, você pode encontrair findViewById() paira obter uma reference à visualização MyCompound , assim como você faz com qualquer visão padrão.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.