Показывать XML-данные поверх фона в Android

#java #android #xml

#java #Android #xml

Вопрос:

Когда я показываю свой список XML-данных в моем приложении для Android, он показывает каждый элемент со своим собственным фоном. Но я хочу, чтобы фоновое изображение было статичным, а список отображался поверх него. ниже приведен код для listplaceholder.xml и два действия. В одном из них есть функции XML, а другой предназначен для отображения данных.

Вы также можете загрузить страницу eclipse здесь

listplaceholder.xml:

 <ListView
    android:background="#00000000"
    android:id="@id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:drawSelectorOnTop="false" />

      <TextView  
android:id="@ id/item_title"
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:textAppearance="?android:attr/textAppearanceMedium"
android:background="#00000000"
android:padding="2dp"
android:textSize="20dp" />
<TextView  
android:id="@ id/item_subtitle"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:background="#00000000" 
android:padding="2dp"
android:textSize="13dp" />
<TextView  
android:id="@ id/id_title"
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:background="#00000000"
android:padding="2dp"
android:textSize="13dp" />
  

Xmlфункции:

 package com.patriotsar;

import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;


public class XMLfunctions {

    public final static Document XMLfromString(String xml){

        Document doc = null;

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {

            DocumentBuilder db = dbf.newDocumentBuilder();

            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(xml));
            doc = db.parse(is); 

        } catch (ParserConfigurationException e) {
            System.out.println("XML parse error: "   e.getMessage());
            return null;
        } catch (SAXException e) {
            System.out.println("Wrong XML file structure: "   e.getMessage());
            return null;
        } catch (IOException e) {
            System.out.println("I/O exeption: "   e.getMessage());
            return null;
        }

        return doc;

    }

    /** Returns element value
      * @param elem element (it is XML tag)
      * @return Element value otherwise empty String
      */
     public final static String getElementValue( Node elem ) {
         Node kid;
         if( elem != null){
             if (elem.hasChildNodes()){
                 for( kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling() ){
                     if( kid.getNodeType() == Node.TEXT_NODE  ){
                         return kid.getNodeValue();
                     }
                 }
             }
         }
         return "";
     }

     public static String getXML(){  
            String line = null;

            try {

                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost("http://p-xr.com/xml");

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                line = EntityUtils.toString(httpEntity);

            } catch (UnsupportedEncodingException e) {
                line = "<results status="error"><msg>Can't connect to server</msg></results>";
            } catch (MalformedURLException e) {
                line = "<results status="error"><msg>Can't connect to server</msg></results>";
            } catch (IOException e) {
                line = "<results status="error"><msg>Can't connect to server</msg></results>";
            }

            return line;

    }

    public static int numResults(Document doc){     
        Node results = doc.getDocumentElement();
        int res = -1;

        try{
            res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue());
        }catch(Exception e ){
            res = -1;
        }

        return res;
    }

    public static String getValue(Element item, String str) {       
        NodeList n = item.getElementsByTagName(str);        
        return XMLfunctions.getElementValue(n.item(0));
    }
}
  

ShowXMLPAR.java:

 package com.patriotsar;

import java.util.ArrayList;
import java.util.HashMap;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import com.patriotsar.XMLfunctions;


import android.app.ListActivity;


import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class ShowXMLPAR extends ListActivity {

     /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listplaceholder);

        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();


        String xml = XMLfunctions.getXML();
        Document doc = XMLfunctions.XMLfromString(xml);

        int numResults = XMLfunctions.numResults(doc);

        if((numResults <= 0)){
            Toast.makeText(ShowXMLPAR.this, "Geen resultaten gevonden", Toast.LENGTH_LONG).show();  
            finish();
        }

        NodeList nodes = doc.getElementsByTagName("result");

        for (int i = 0; i < nodes.getLength(); i  ) {                           
            HashMap<String, String> map = new HashMap<String, String>();    

            Element e = (Element)nodes.item(i);
            map.put("id","test:"    XMLfunctions.getValue(e, "id"));
            map.put("name", "MIKE RAWERS:"   XMLfunctions.getValue(e, "name"));
            map.put("Score", "Score: "   XMLfunctions.getValue(e, "score"));
            mylist.add(map);            
        }       
//       
        ListAdapter adapter = new SimpleAdapter(ShowXMLPAR.this, mylist , R.layout.listplaceholder, 
                        new String[] { "id", "name", "Score" }, 
                        new int[] { R.id.id_title, R.id.item_title, R.id.item_subtitle });

        setListAdapter(adapter);


}
}
  

Ответ №1:

Попробуйте добавить android:background=»#00000000″ в тег ListView. Это должно сделать фон прозрачным и позволить просвечивать фон LinearLayout. Возможно, вам потребуется проделать то же самое с каждым TextView.

Барри

Комментарии:

1. Если вы сделаете это, я полагаю, вы также захотите следовать приведенным здесь инструкциям developer.android.com/resources/articles/… что касается кэша цветов

2. Я добавил как прозрачный цвет, так и подсказку кеша, но все еще не работает. странно, когда я не устанавливаю фоновое изображение в моем <LinearLayout>, каждый набор XML-данных равен высоте всего экрана (много вертикальной прокрутки). но когда я удаляю его, каждый набор XML-данных имеет высоту всего 30-40 пикселей. Также фон статичен внизу, а затем повторяется для каждого элемента просмотра списка. ЕСЛИ это имеет смысл. lol Спасибо за помощь до сих пор.