


Comment Android utilise DOM pour analyser XML et créer une boîte contextuelle d'émoticône
Rendu :
Comment analyser le XML suivant :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <array> <string>(#大笑)</string> <string>(#微笑)</string> <string>(#亲亲)</string> <string>(#抱抱)</string> <string>(#色色)</string> <string>(#好失望哟)</string> </array>
Analysez comme ceci :
public class MessageFaceModel { /** single instance of this class */ private static MessageFaceModel instance = null; /** context */ private boolean mInitialized = false; private HashMap<String,Bitmap> mFaceMap = new HashMap<String,Bitmap>(); private ArrayList<String> mFaceStrings = new ArrayList<String>(); private ArrayList<Bitmap> mFaceIcons = new ArrayList<Bitmap>(); /** * constructor */ private MessageFaceModel(){ } /** * Factory method */ public static synchronized MessageFaceModel getInstance(){ if(instance == null){ instance = new MessageFaceModel(); } return instance; } /** * initialize face data */ public void init(Context context){ if(mInitialized){ //initialize only once return; } mFaceMap.clear(); mFaceStrings.clear(); mFaceIcons.clear(); AssetManager assetManager = context.getAssets(); ArrayList<String> faces = new ArrayList<String>(); DocumentBuilderFactory docBuilderFactory = null; DocumentBuilder docBuilder = null; Document doc = null; try { docBuilderFactory = DocumentBuilderFactory.newInstance(); docBuilder = docBuilderFactory.newDocumentBuilder(); doc = docBuilder.parse(assetManager.open("MessageFace.xml")); Element root = doc.getDocumentElement(); NodeList nodeList = root.getElementsByTagName("string"); for(int i =0;i< nodeList.getLength();i++) { Node node = nodeList.item(i); String s = ""; NodeList list = node.getChildNodes(); if(list != null){ for(int j = 0; j < list.getLength(); j++){ s += list.item(j).getNodeValue(); } } faces.add(s); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ doc = null; docBuilder = null; docBuilderFactory = null; } int i; for(i = 0; i < faces.size(); ++i){ int index = i + 1; int id = context.getResources().getIdentifier( "msgface_" + index, "drawable", "com.example.tianqitongtest"); try { Bitmap bm = BitmapFactory.decodeResource(context.getResources(),id); mFaceMap.put(faces.get(i), bm); mFaceStrings.add(faces.get(i)); mFaceIcons.add(bm); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } mInitialized = true; } public ArrayList<Bitmap> getFaceIcons(){ return mFaceIcons; } public ArrayList<String> getFaceStrings(){ return mFaceStrings; } public Bitmap getFaceIcon(String face){ if(mFaceMap != null){ return mFaceMap.get(face); }else{ return null; } } public void clear() { mInitialized = false; mFaceMap.clear(); mFaceStrings.clear(); mFaceIcons.clear(); } }
Ensuite, écrivez cette activité de style Dialogue :
<activity android:name=".InputFaceActivity" android:theme="@android:style/Theme.Dialog" android:configChanges="keyboardHidden|orientation"> </activity>
La mise en page est :
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="300dp" android:minHeight="100dp" android:background="#EFEFEF"> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/input_face_gridview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="18dp" android:layout_marginRight="10dp" android:layout_marginTop = "18dp" android:layout_marginBottom = "30dp" android:numColumns="auto_fit" android:horizontalSpacing="10dp" android:verticalSpacing="15dp" android:columnWidth="50dp" android:stretchMode="columnWidth" android:gravity="center" android:layout_weight="1.0"> </GridView> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/input_face_cancel_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/cancel_button_style"> </Button> </LinearLayout> </RelativeLayout>
public class InputFaceActivity extends Activity{ private MessageFaceModel mMessageFaceModel = MessageFaceModel.getInstance(); public static final int SELECT_STATE_FACE_ICON = 209; public static final int SELECT_MESSAGE_FACE_ICON = 109; private int mWidth = 0; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); mWidth = this.getResources().getDimensionPixelSize(R.dimen.image_width); getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); setContentView(R.layout.input_face_activity); GridView gridView = (GridView) findViewById(R.id.input_face_gridview); gridView.setAdapter(new FaceListAdapter()); gridView.setOnItemClickListener(new FaceListOnItemClickListener()); Button cancelButton = (Button)findViewById(R.id.input_face_cancel_button); cancelButton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { finish(); } }); } private class FaceListAdapter extends BaseAdapter { public int getCount() { if(mMessageFaceModel.getFaceIcons() != null){ return mMessageFaceModel.getFaceIcons().size(); }else{ return 0; } } public Object getItem(int arg0) { return arg0; } public long getItemId(int arg0) { return arg0; } public View getView(int position, View convertView, ViewGroup parent) { ImageView view = new ImageView(InputFaceActivity.this); view.setImageBitmap(mMessageFaceModel.getFaceIcons().get(position)); view.setLayoutParams(new GridView.LayoutParams(mWidth, mWidth)); view.setScaleType(ScaleType.CENTER); return view; } } }
Ce qui précède explique comment Android utilise DOM pour analyser le XML et créer une boîte contextuelle d'émoticônes. Pour plus de contenu connexe, veuillez prêter attention au site Web chinois PHP (www.php. .cn) !

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Ces derniers jours, Ice Universe n'a cessé de révéler des détails sur le Galaxy S25 Ultra, qui est largement considéré comme le prochain smartphone phare de Samsung. Entre autres choses, le fuyard a affirmé que Samsung prévoyait d'apporter une seule mise à niveau de l'appareil photo.

OnLeaks s'est désormais associé à Android Headlines pour offrir un premier aperçu du Galaxy S25 Ultra, quelques jours après une tentative infructueuse de générer plus de 4 000 $ auprès de ses abonnés X (anciennement Twitter). Pour le contexte, les images de rendu intégrées ci-dessous h

En plus d'annoncer deux nouveaux smartphones, TCL a également annoncé une nouvelle tablette Android appelée NXTPAPER 14, et sa taille d'écran massive est l'un de ses arguments de vente. Le NXTPAPER 14 est doté de la version 3.0 de la marque emblématique de panneaux LCD mats de TCL.

Samsung n'a pas encore donné d'indications sur la date à laquelle il mettrait à jour sa série de smartphones Fan Edition (FE). Dans l’état actuel des choses, le Galaxy S23 FE reste l’édition la plus récente de la société, ayant été présentée début octobre 2023. Cependant, de nombreux

Le Vivo Y300 Pro vient d'être entièrement dévoilé et c'est l'un des téléphones Android de milieu de gamme les plus fins avec une grande batterie. Pour être exact, le smartphone ne fait que 7,69 mm d'épaisseur mais dispose d'une batterie de 6 500 mAh. C'est la même capacité que le lancement récent

Ces derniers jours, Ice Universe n'a cessé de révéler des détails sur le Galaxy S25 Ultra, qui est largement considéré comme le prochain smartphone phare de Samsung. Entre autres choses, le fuyard a affirmé que Samsung prévoyait d'apporter une seule mise à niveau de l'appareil photo.

Le Redmi Note 14 Pro Plus est désormais officiel en tant que successeur direct du Redmi Note 13 Pro Plus de l'année dernière (375 $ sur Amazon). Comme prévu, le Redmi Note 14 Pro Plus est en tête de la série Redmi Note 14 aux côtés du Redmi Note 14 et du Redmi Note 14 Pro. Li

La marque sœur de OnePlus, iQOO, a un cycle de produits 2023-4 qui pourrait être presque terminé ; néanmoins, la marque a déclaré qu'elle n'en avait pas encore fini avec sa série Z9. Sa variante Turbo+ finale, et peut-être la plus haut de gamme, vient d'être annoncée comme prévu. T
