对齐Listview项目中的图标和标题

时间:2013-01-27 12:49:41

标签: android

我在android上为我的研究项目设计我的界面。所以我添加了facebook侧面导航列表视图。但是当itesms被添加到列表视图时,它将不会水平对齐中心。我需要将图标原点和标题放在同一水平线上。请善待我为我的问题提供解决方案。下面提供了我的代码。我很抱歉我的英语。

这是我当前界面的图片。请参考设置按钮。设置字有点上升。我需要水平相同的图标和设置字。

image is here http://sphotos-e.ak.fbcdn.net/hphotos-ak-ash4/485944_4792129535506_1863888545_n.jpg

slide.xml - 列表视图的所有项目都包含在此处

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/item_one"
    android:icon="@drawable/settings"
    android:title="@string/item_one"
    android:top="30dp"
   >
</item>

    <item
    android:id="@+id/item_two"
    android:icon="@drawable/ic_launcher"
    android:title="@string/item_three">
</item>

<item
    android:id="@+id/item_three"
    android:icon="@drawable/ic_launcher"
    android:title="@string/item_three">
</item>
<item
    android:id="@+id/item_four"
    android:icon="@drawable/ic_launcher"
    android:title="@string/item_four">
</item>

 <item
    android:id="@+id/item_five"
    android:icon="@drawable/ic_launcher"
    android:title="@string/item_one">
</item>
<item
    android:id="@+id/item_six"
    android:icon="@drawable/ic_launcher"
    android:title="@string/item_two">
</item>
<item
    android:id="@+id/item_seven"
    android:icon="@drawable/ic_launcher"
    android:title="@string/item_three">
</item>
<item
    android:id="@+id/item_eight"
    android:icon="@drawable/ic_launcher"
    android:title="@string/item_four"
   >
</item>
</menu>

slidemenu.xml - 列表视图在这里

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
     >

    <LinearLayout
        android:layout_width="260dip"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:background="#2c323f"

         >

        <ImageView
            android:id="@+id/menu_header"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left" 
            android:layout_marginTop="10dp"

            android:layout_marginBottom="10dp"
            android:layout_marginLeft="10dp"
            />

        <ListView
            android:id="@+id/menu_listview"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:scrollbars="none"
            android:background="#2c323f"
            android:fadingEdge="none"
            android:overScrollMode="never"
            android:listSelector="#454b5d"
            android:divider="@layout/divider"
            android:dividerHeight="1sp"
            android:cacheColorHint="#2c323f"

             />
    </LinearLayout>

    <FrameLayout
        android:id="@+id/overlay"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>

</LinearLayout>

这是我的活动类

package com.coboltforge.slidemenuexample;

import com.coboltforge.slidemenu.SlideMenu;
import com.coboltforge.slidemenu.SlideMenu.SlideMenuItem;
import com.coboltforge.slidemenu.SlideMenuInterface.OnSlideMenuItemClickListener;

import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnSlideMenuItemClickListener {

    private SlideMenu slidemenu;
    private final static int MYITEMID = 42;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        /*
         * There are two ways to add the slide menu: 
         * From code or to inflate it from XML (then you have to declare it in the activities layout XML)
         */
        // this is from code. no XML declaration necessary, but you won't get state restored after rotation.
//      slidemenu = new SlideMenu(this, R.menu.slide, this, 333);
        // this inflates the menu from XML. open/closed state will be restored after rotation, but you'll have to call init.
        slidemenu = (SlideMenu) findViewById(R.id.slideMenu);
        slidemenu.init(this, R.menu.slide, this, 333);

        // this can set the menu to initially shown instead of hidden
//      slidemenu.setAsShown(); 

        // set optional header image
        slidemenu.setHeaderImage(getResources().getDrawable(R.drawable.ic_launcher));

        // this demonstrates how to dynamically add menu items
        SlideMenuItem item = new SlideMenuItem();
        item.id = MYITEMID;
        item.icon = getResources().getDrawable(R.drawable.ic_launcher);
        item.label = "Dynamically added item";
        slidemenu.addMenuItem(item);

        // connect the fallback button in case there is no ActionBar
        Button b = (Button) findViewById(R.id.buttonMenu);
        b.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                slidemenu.show();
            }
        });

    }



    public void onSlideMenuItemClick(int itemId) {

        switch(itemId) {
        case R.id.item_one:
            Toast.makeText(this, "Item one selected", Toast.LENGTH_SHORT).show();
            break;
        case R.id.item_two:
            Toast.makeText(this, "Item two selected", Toast.LENGTH_SHORT).show();
            break;
        case R.id.item_three:
            Toast.makeText(this, "Item three selected", Toast.LENGTH_SHORT).show();
            break;
        case R.id.item_four:
            Toast.makeText(this, "Item four selected", Toast.LENGTH_SHORT).show();
            break;
        case MYITEMID:
            Toast.makeText(this, "Dynamically added item selected", Toast.LENGTH_SHORT).show();
            break;
        }

    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
        case android.R.id.home: // this is the app icon of the actionbar
            slidemenu.show();
            break;
        }
        return super.onOptionsItemSelected(item);
    }


}

2 个答案:

答案 0 :(得分:0)

您可以使用

android:gravity="center" (or top/bottom/left/right depending your needs)
你的textview将文本对齐到你想要的地方。

  

layout_gravity设置视图或布局的重力(对齐)   在其父母内部。如果在线性布局中有文本视图,   然后设置文本视图的layout_gravity将改变它   布局中的对齐方式。重力设定内容的对齐   它所应用的视图或布局。如果你想要你的文字(在   文本视图)左对齐,居中或右对齐,然后修改   文本视图的gravity属性。

来自:http://thinkandroid.wordpress.com/2010/01/14/how-to-position-views-properly-in-layouts/

答案 1 :(得分:0)

  

设置字有点上升。我需要图标和设置字   在同一行水平相邻

我猜你用的是this library。问题是您无法访问用于滑动菜单适配器的行视图的布局文件来修改它。但是,如果您复制库的代码(由很少的文件组成)并将其直接放在项目中,则可以轻松解决此问题。然后像这样修改slidemenu_listitem.xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/menu_icon"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginBottom="10dip"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="5dip"
        android:layout_marginTop="10dip" />

    <TextView
        android:id="@+id/menu_label"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:layout_marginBottom="10dip"
        android:layout_marginTop="10dip"

        android:textSize="24dp" />

</LinearLayout>

当然,您总是可以向用户发出一个功能请求,让库如何修改它,以便您可以在库中插入自己的布局文件(等待它发生)。