#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 Спасибо за помощь до сих пор.