0

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

这是我当前界面的图像。请参阅设置按钮。设置字有点上行。我需要在同一行中水平对齐图标和设置字。

图片在这里 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);
    }


}
4

2 回答 2

0

您可以使用

android:gravity="center" (or top/bottom/left/right depending your needs)

您的 textview 以将文本对齐到您想要的位置。

layout_gravity 设置视图或布局在其父级内部的重力(对齐)。如果你在线性布局中有一个文本视图,那么设置文本视图的 layout_gravity 将改变它在布局中的对齐方式。重力设置应用它的视图或布局的内容的对齐方式。如果您希望文本(在文本视图中)左对齐、居中或右对齐,请修改文本视图的重力属性。

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

于 2013-01-27T12:56:28.127 回答
0

设置字有点上行。我需要在同一行中水平对齐图标和设置字

我猜你使用这个库。问题是您无法访问用于滑动菜单适配器的行视图的布局文件来修改它。但是,如果您复制库的代码(由很少的文件组成)并将其直接放入您的项目中,您可以轻松解决这个问题。然后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>

当然,您始终可以向用户提出功能请求,以便库如何修改它,以便您可以将自己的布局文件插入库中(并等待发生这种情况)。

于 2013-01-27T13:08:50.397 回答