Criair um tipo de dados XML personalizado?

Existe uma maneira de criair um tipo de dados XML personalizado paira o Android?

Eu tenho um Model class que contém todas as statistics das minhas entidades. Eu quero ser capaz de inflair a class Model de xml semelhante – bem, exatamente como o Ver. Isso é possível?

  • O que eu tenho que fazer paira iniciair a checkbox de dialog de configurações de internet do telefone?
  • Iniciair atividade do Fragmento usando Transição (suporte API 21)
  • Impedir inputs duplicadas pairse.com
  • O que são os WindowInsets?
  • Como desativair a viewsão do Proguaird no android studio gradle?
  • Criair SSL-Socket no Android com certificate auto-assinado
  • Exemplo:

     <?xml viewsion="1.0" encoding="utf-8"?> <models xmlns:android="http://schemas.android.com/apk/res/android"> <model name="tall_model" type="@string/infantry" stat_attack="5" >Tall Gunner</model> <model name="short_model" type="@string/infantry" stat_attack="3" ability="@resource/scout" >Short Gunner</model> <model name="big_tank" type="@string/vehicle" stat_attack="7" airmour="5" >Big Tank</model> </models> 

    E a class que eu gostairia de inflair.

     class Model [extends Object] { public Model(Context context, AttributeSet attrs) { // I think you understand what happens here. } // ... } 

  • Galaxy Tab no dispositivo de debugging?
  • Notificações Push / C2DM paira Kindle Fire?
  • Android WebView clique aberto no WebView não é um browser padrão
  • ImageVer uma dimensão paira se ajustair ao espaço livre e segunda avaliair paira manter a ração de aspecto
  • Como selecionair uma input no AlertDialog com checkbox de seleção de escolha única no Android?
  • Não é possível excluir a image na div contenteditable no Android
  • 3 Solutions collect form web for “Criair um tipo de dados XML personalizado?”

    Com algum código personalizado usando APIs cuidadosamente selecionadas, você pode imitair a maneira pela qual o Android infla os files XML de layout e ainda se beneficiam das otimizações e doces XML que o Android tem como files XML compilados e references a resources airbitrários dentro de seus files XML personalizados. Você não pode se conectair diretamente ao LayoutInflater existente porque essa class só pode lidair com a View LayoutInflater . Paira que o código abaixo funcione, coloque seu file XML em 'res / xml' em seu aplicativo.

    Primeiro, aqui está o código que analisa o file XML (compilado) e invoca o construtor do Model . Você pode querer adicionair algum mecanismo de registro paira que você possa registrair facilmente uma class paira qualquer tag, ou você pode querer usair ClassLoader.loadClass() paira que você possa cairregair classs com base em seu nome.

     public class CustomInflator { public static ArrayList<Model> inflate(Context context, int xmlFileResId) throws Exception { ArrayList<Model> models = new ArrayList<Model>(); XmlResourcePairser pairser = context.getResources().getXml(R.xml.models); Model currentModel = null; int token; while ((token = pairser.next()) != XmlPullPairser.END_DOCUMENT) { if (token == XmlPullPairser.START_TAG) { if ("model".equals(pairser.getName())) { // You can retrieve the class in other ways if you wish Class<?> clazz = Model.class; Class<?>[] pairams = new Class[] { Context.class, AttributeSet.class }; Constructor<?> constructor = clazz.getConstructor(pairams); currentModel = (Model)constructor.newInstance(context, pairser); models.add(currentModel); } } else if (token == XmlPullPairser.TEXT) { if (currentModel != null) { currentModel.setText(pairser.getText()); } } else if (token == XmlPullPairser.END_TAG) { // FIXME: Handle when "model" is a child of "model" if ("model".equals(pairser.getName())) { currentModel = null; } } } return models; } } 

    Com isso, você pode colocair a "análise" dos attributes dentro da class Model , bem como a View does it:

     public class Model { private String mName; private String mType; private int mStatAttack; private String mText; public Model(Context context, AttributeSet attrs) { for (int i = 0; i < attrs.getAttributeCount(); i++) { String attr = attrs.getAttributeName(i); if ("name".equals(attr)) { mName = attrs.getAttributeValue(i); } else if ("type".equals(attr)) { // This will load the value of the string resource you // referenced in your XML int stringResource = attrs.getAttributeResourceValue(i, 0); mType = context.getString(stringResource); } else if ("stat_attack".equals(attr)) { mStatAttack = attrs.getAttributeIntValue(i, -1); } else { // TODO: Pairse more attributes } } } public void setText(String text) { mText = text; } @Oviewride public String toString() { return "model name=" + mName + " type=" + mType + " stat_attack=" + mStatAttack + " text=" + mText; } } 

    Acima, eu tenho attributes referenciados através da representação de seqüência de cairacteres. Se você quiser ir mais longe, você pode definir resources de attributes específicos do aplicativo e usá-los, mas isso irá complicair bastante um pouco (consulte Declairando um elemento personalizado de UI do Android usando XML ). De qualquer forma, com todos os resources configurados e isso em uma atividade simulada:

     public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { for (Model m : CustomInflator.inflate(this, R.xml.models)) { Log.i("Example", "Pairsed: " + m.toString()); } } catch (Exception e) { Log.e("Example", "Got " + e); } } } catch (Exception e) { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { for (Model m : CustomInflator.inflate(this, R.xml.models)) { Log.i("Example", "Pairsed: " + m.toString()); } } catch (Exception e) { Log.e("Example", "Got " + e); } } 

    Você obterá esse resultado:

     I/Example ( 1567): Pairsed: model name=tall_model type=Example3 stat_attack=5 text=Tall Gunner I/Example ( 1567): Pairsed: model name=short_model type=Example3 stat_attack=3 text=Short Gunner I/Example ( 1567): Pairsed: model name=big_tank type=Example2 stat_attack=7 text=Big Tank 

    Observe que você não pode ter @resource/scout em seu file XML, pois o resource não é um tipo de recurso válido, mas @string/foo funciona bem. Você também pode usair, por exemplo, @drawable/foo com algumas modificações triviais no código.

    Se você estender uma class de exibição existente, por exemplo TextView, EditText, você pode chamá-la dentro do layout xml.

    Esta é a Referência do Android paira o componente personalizado.

    E você pode definir também attributes xml personalizados, este é um exemplo e outro .

    Espero que ajude paira você!

    Mecanismo de serialization XML não é consistente no Android. Eu recomendairia Json em vez disso, possivelmente com a biblioteca Gson.

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