显示的按钮,线性布局的ListView的结束 [英] Displaying the button at the end of the ListView with Linear Layout
问题描述
我在android应用开发的新手。我面对关于在列表视图的末尾显示一个按钮的一个问题。我使用的线性布局。应用程序可以显示所有列表中,但不能显示的按钮。我也曾在这里我粘贴XML code。在这方面的任何帮助,将是非常美联社preciated。
磨憨
main.xml中
<?XML版本=1.0编码=UTF-8&GT?;
< RelativeLayout的
的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
>< ImageView的
机器人:ID =@ + ID / contact_image
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT/>
<按钮
机器人:ID =@ + ID / btn_New
机器人:宽=170dp
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_centerInParent =真
机器人:layout_alignParentBottom =真
机器人:layout_marginBottom =20dp
机器人:文字=点击 /><的TextView
机器人:ID =@ + ID / TextView的
机器人:layout_width =FILL_PARENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_above =@ ID / btn_New
机器人:文字=@字符串/你好
/>< ListView控件
机器人:ID =@ + ID / contactList
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:layout_above =@ ID / TextView的
/>< / RelativeLayout的>
contactlistitem.xml
<?XML版本=1.0编码=UTF-8&GT?;
<的LinearLayout 的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =match_parent
机器人:layout_height =match_parent机器人:方向=横向机器人:weightSum =1> <的TextView
机器人:ID =@ + ID / txtDisplayName
机器人:layout_width =250dp
机器人:layout_height =WRAP_CONTENT
机器人:文字=TextView的
机器人:textAppearance =机器人:ATTR / textAppearanceMedium>
< / TextView的> < ImageView的机器人:ID =@ + ID / contact_image
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT/>
< TextView的机器人:机器人:ATTR / textAppearanceLargetextAppearance =
机器人:ID =@ + ID / textView1
机器人:layout_height =WRAP_CONTENT
机器人:layout_width =WRAP_CONTENT>< / TextView的>
< / LinearLayout中>
ContactListActivity.java
包com.contactlist;进口android.app.Activity;
进口android.graphics.BitmapFactory;
进口android.app.ListActivity;
进口android.content.ContentResolver;
进口android.database.Cursor;
进口android.graphics.Bitmap;
进口android.net.Uri;
进口android.os.Bundle;
进口android.provider.ContactsContract;
进口android.view.View;
进口android.widget.ListView;
进口android.widget.ArrayAdapter;
进口android.widget.Toast;
进口android.provider.ContactsContract.CommonDataKinds.Photo;
进口android.provider.ContactsContract.Data;公共类ContactListActivity扩展ListActivity {
/ **当第一次创建活动调用。 * /
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
ContactList contactList = this.getContacts();
ArrayAdapter<联系与GT;适配器=新ContactAdapter(在此,contactList.getContacts());
setListAdapter(适配器);
} @覆盖
保护无效onListItemClick(ListView中升,视图V,INT位置,长的ID)
{
super.onListItemClick(L,V,位置ID);
对象o = this.getListAdapter()的getItem(位置)。
联系C =(联系)O;
Toast.makeText(这一点,c.getDisplayName(),Toast.LENGTH_SHORT).show();
Toast.makeText(这一点,c.getId(),Toast.LENGTH_SHORT).show();
} 私人ContactList getContacts()
{
ContactList contactList =新ContactList();
URI URI = ContactsContract.Contacts.CONTENT_URI;
ContentResolver的CR = getContentResolver();
字符串中将sortOrder = ContactsContract.Contacts.DISPLAY_NAME +分页中局部ASC;
光标CUR = cr.query(URI,NULL,NULL,NULL,中将sortOrder); 如果(cur.getCount()大于0)
{
字符串ID;
串IMG;
字符串名称;
而(cur.moveToNext())
{
联系C =新的联系人();
ID = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
IMG = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
名称= cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
最后的位图图片;
如果(IMG!= NULL){
照片= queryContactBitmap(IMG);
}其他{
照片= NULL;
}
c.setId(ID);
c.setImage(照片);
c.setDisplayName(名);
contactList.addContact(C);
}
}
// cur.close();
返回contactList;
}
私人位图queryContactBitmap(字符串PHOTOID){
最后光标照片= managedQuery(
Data.CONTENT_URI,
新的String [] {} Photo.PHOTO,//列中的BLOB存储
Data._ID +=?,//选择行按id
新的String [] {} PHOTOID,//由给定PHOTOID过滤器
空值);
最后的位图photoBitmap;
如果(photo.moveToFirst()){
字节[] = photoBlob photo.getBlob(
photo.getColumnIndex(Photo.PHOTO));
photoBitmap = BitmapFactory.de codeByteArray的(
photoBlob,0,photoBlob.length);
}其他{
photoBitmap = NULL;
}
photo.close(); 返回photoBitmap;
}
}
ContactList.java
包com.contactlist;进口的java.util.ArrayList;
进口的java.util.List;公共类ContactList {
私人列表<联系与GT; _contacts =新的ArrayList<联系与GT;();
公开名单<联系与GT; getContacts(){返回_contacts;} 公共无效的addContact(联系方式联系我们){this._contacts.add(接触);}}
ContactAdapter.java
包com.contactlist;进口的java.util.List;
进口android.app.Activity;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.ArrayAdapter;
进口android.widget.ImageView;
进口android.widget.TextView;公共类ContactAdapter扩展ArrayAdapter<联系与GT; { 私人最终名单<联系与GT; _contacts;
私人最终活动_context; 公共ContactAdapter(Activity上下文,列表<联系与GT;触点)
{
超(背景下,R.layout.main,联系人);
this._contacts =接触;
this._context =背景;
}
静态类ViewHolder {
保护TextView的文本;
私人联系_contact;
公共ImageView的ImageView的;
保护无效setContact(联系方式联系方式)
{
text.setText(contact.getDisplayName());
imageview.setImageBitmap(contact.getImage());
_contact =接触;
}
保护联系getContact(){返回_contact;}
}
@覆盖
公众联系的getItem(INT位置)
{
返回_contacts.get(位置);
}
@覆盖
公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup)
{ 查看查看= NULL;
如果(convertView == NULL)
{
LayoutInflater吹气= _context.getLayoutInflater();
鉴于= inflater.inflate(R.layout.contactlistitem,NULL);
最后ViewHolder viewHolder =新ViewHolder();
viewHolder.text =(TextView中)view.findViewById(R.id.txtDisplayName);
viewHolder.imageview =(ImageView的)view.findViewById(R.id.contact_image);
viewHolder.setContact(_contacts.get(位置));
view.setTag(viewHolder); } 其他
{
鉴于= convertView;
} 返回视图。
}
}
Contact.java
包com.contactlist;进口的java.util.ArrayList;进口android.R.string;
进口android.graphics.Bitmap;公共类联系{
私人字符串_id;
私人字符串_displayName;
私人位图_img; 公共字符串的getId(){返回_id;}
公共字符串getDisplayName(){返回_displayName;}
公共位图的getImage(){返回_img;}
公共无效SETID(字符串ID){_ ID = ID;}
公共无效setDisplayName(字符串显示名){_ =的displayName显示名;}
公共无效setImage(位图图片){_ = IMG IMG;}
}
试试这个,看看它是否工作:
<?XML版本=1.0编码=UTF-8&GT?;
< RelativeLayout的
的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
>< ImageView的
机器人:ID =@ + ID / contact_image
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT/>
<按钮
机器人:ID =@ + ID / btn_New
机器人:宽=170dp
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_centerInParent =真
机器人:layout_alignParentBottom =真
机器人:layout_marginBottom =20dp
机器人:文字=点击 /><的TextView
机器人:ID =@ + ID / TextView的
机器人:layout_width =FILL_PARENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_above =@ ID / btn_New
机器人:文字=@字符串/你好
/>< ListView控件
机器人:ID =@ + ID / contactList
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:layout_above =@ ID / TextView的
/>< / RelativeLayout的>
MainActivity类别:
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main); ListView控件的ListView =(ListView控件)findViewById(R.id.contactList); 的String []值=新的String [] {机器人,iPhone,的WindowsMobile
黑莓,WebOS的,Ubuntu的,Windows7的,最大OS X
的Linux,OS / 2}; //第一个参数 - 上下文
//第二个参数 - 布局行
//第三参数 - TextView的编号到的数据被写入
//彷徨 - 数据数组
ArrayAdapter<串GT;适配器=新ArrayAdapter<串GT;(这一点,
android.R.layout.simple_list_item_1,android.R.id.text1,价值观); //指定适配器的ListView
listView.setAdapter(适配器);
}
现在当你把的ListView里面的东西
它不应该推按钮或的TextView
下来。
I am a newbie in android application development. I faced a problem regarding the displaying a button at the end of the List View. I am using Linear Layout. The application can show all the list but cannot show the Button. I have also pasted my XML code here. Any help in this regard, will be highly appreciated.
Mohan
main.xml
<?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="fill_parent"
>
<ImageView
android:id="@+id/contact_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_New"
android:width="170dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="20dp"
android:text="Click"
/>
<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/btn_New"
android:text="@string/hello"
/>
<ListView
android:id="@+id/contactList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/textView"
/>
</RelativeLayout>
contactlistitem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="horizontal" android:weightSum="1">
<TextView
android:id="@+id/txtDisplayName"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium" >
</TextView>
<ImageView android:id="@+id/contact_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/textView1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"></TextView>
</LinearLayout>
ContactListActivity.java
package com.contactlist;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.app.ListActivity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.ListView;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.provider.ContactsContract.Data;
public class ContactListActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ContactList contactList=this.getContacts();
ArrayAdapter<Contact> adapter=new ContactAdapter(this,contactList.getContacts());
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position, id);
Object o=this.getListAdapter().getItem(position);
Contact c=(Contact)o;
Toast.makeText(this, c.getDisplayName(), Toast.LENGTH_SHORT).show();
Toast.makeText(this, c.getId(), Toast.LENGTH_SHORT).show();
}
private ContactList getContacts()
{
ContactList contactList=new ContactList();
Uri uri=ContactsContract.Contacts.CONTENT_URI;
ContentResolver cr=getContentResolver();
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
Cursor cur=cr.query(uri, null, null, null, sortOrder);
if(cur.getCount() >0)
{
String id;
String img;
String name;
while(cur.moveToNext())
{
Contact c =new Contact();
id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
img= cur.getString(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
name=cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
final Bitmap photo;
if(img != null) {
photo = queryContactBitmap(img);
} else {
photo = null;
}
c.setId(id);
c.setImage(photo);
c.setDisplayName(name);
contactList.addContact(c);
}
}
// cur.close();
return contactList;
}
private Bitmap queryContactBitmap(String photoId) {
final Cursor photo = managedQuery(
Data.CONTENT_URI,
new String[] {Photo.PHOTO}, // column where the blob is stored
Data._ID + "=?", // select row by id
new String[]{photoId}, // filter by the given photoId
null);
final Bitmap photoBitmap;
if(photo.moveToFirst()) {
byte[] photoBlob = photo.getBlob(
photo.getColumnIndex(Photo.PHOTO));
photoBitmap = BitmapFactory.decodeByteArray(
photoBlob, 0, photoBlob.length);
} else {
photoBitmap = null;
}
photo.close();
return photoBitmap;
}
}
ContactList.java
package com.contactlist;
import java.util.ArrayList;
import java.util.List;
public class ContactList {
private List<Contact> _contacts=new ArrayList<Contact>();
public List<Contact> getContacts(){return _contacts;}
public void addContact(Contact contact){ this._contacts.add(contact);}
}
ContactAdapter.java
package com.contactlist;
import java.util.List;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ContactAdapter extends ArrayAdapter<Contact> {
private final List<Contact> _contacts;
private final Activity _context;
public ContactAdapter(Activity context, List<Contact> contacts)
{
super(context,R.layout.main,contacts);
this._contacts=contacts;
this._context=context;
}
static class ViewHolder {
protected TextView text;
private Contact _contact;
public ImageView imageview;
protected void setContact(Contact contact)
{
text.setText(contact.getDisplayName());
imageview.setImageBitmap(contact.getImage());
_contact=contact;
}
protected Contact getContact() {return _contact;}
}
@Override
public Contact getItem(int position)
{
return _contacts.get(position);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
View view=null;
if(convertView==null)
{
LayoutInflater inflater=_context.getLayoutInflater();
view=inflater.inflate(R.layout.contactlistitem, null);
final ViewHolder viewHolder=new ViewHolder();
viewHolder.text=(TextView)view.findViewById(R.id.txtDisplayName);
viewHolder.imageview =(ImageView)view.findViewById(R.id.contact_image);
viewHolder.setContact(_contacts.get(position));
view.setTag(viewHolder);
}
else
{
view = convertView;
}
return view;
}
}
Contact.java
package com.contactlist;
import java.util.ArrayList;
import android.R.string;
import android.graphics.Bitmap;
public class Contact {
private String _id;
private String _displayName;
private Bitmap _img;
public String getId(){return _id;}
public String getDisplayName(){return _displayName;}
public Bitmap getImage(){return _img;}
public void setId(String id){_id=id;}
public void setDisplayName(String displayName){_displayName=displayName;}
public void setImage(Bitmap img){_img=img;}
}
Try this and see if it works:
<?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="fill_parent"
>
<ImageView
android:id="@+id/contact_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_New"
android:width="170dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="20dp"
android:text="Click"
/>
<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/btn_New"
android:text="@string/hello"
/>
<ListView
android:id="@+id/contactList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/textView"
/>
</RelativeLayout>
MainActivity class:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView listView = (ListView) findViewById(R.id.contactList);
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2" };
// First parameter - Context
// Second parameter - Layout for the row
// Third parameter - ID of the TextView to which the data is written
// Forth - the Array of data
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
// Assign adapter to ListView
listView.setAdapter(adapter);
}
Now when you put things inside the listView
it should not "push" the button or the textView
down.
这篇关于显示的按钮,线性布局的ListView的结束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!