如何让ActionBar上的项目在左侧,一个在中间,一个在右侧?

时间:2012-10-19 17:14:02

标签: android actionbarsherlock

我正在使用actionbarsherlock来执行此操作。 我在动作栏中想要的例子:
[登录] [公司徽标] [过滤器]

我在操作栏中获得的示例:
      [登录] [公司徽标] [过滤器]

我在res / menu activity_main.xml中创建了登录按钮,公司徽标和过滤器按钮(以drawables的形式)。但是,操作栏上的那些按钮无法完全向左移动,即使我已删除默认应用程序徽标并将其设置为false

getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayShowHomeEnabled (false);

这是我在菜单activity_main.xml中的代码:

<item android:id="@+id/login"
      android:icon="@drawable/login_btn"
      android:layout_gravity="left"
      android:showAsAction="always"/>

<item android:id="@+id/logo"
      android:icon="@drawable/logo_btn"
      android:layout_gravity="center"
      android:showAsAction="always"/>

<item android:id="@+id/filter"
      android:icon="@drawable/filter_btn"
      android:layout_gravity="right"
      android:showAsAction="always"/>

3 个答案:

答案 0 :(得分:31)

您应该为此创建自定义视图。例如(layout/ab_custom.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="match_parent"
    android:layout_gravity="fill_horizontal" >

    <ImageButton
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:src="@drawable/left" />

    <ImageButton
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@drawable/center" />

    <ImageButton
        android:id="@+id/btn3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:src="@drawable/right" />

</RelativeLayout>

然后在您的活动onCreate中调用此方法:

private void showActionBar() {
        LayoutInflater inflator = (LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflator.inflate(R.layout.ab_custom, null);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setDisplayShowHomeEnabled (false);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowTitleEnabled(false);
    actionBar.setCustomView(v);
}

要控制您的物品,请使用:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.btn1:
            //left button, do something
            return true;
        case R.id.btn2:
            //center button
            return true;
        case R.id.btn3:
            // right button
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

编辑:修改了我的回答。最好使用RelativeLayout as parent

答案 1 :(得分:0)

将项目包裹在RelativeLayout中。然后使用:

android:layout_alignParentLeft
android:layout_alignParentCenter
android:layout_alignParentRight

答案 2 :(得分:0)

添加到 Sabre 的答案并解决 snadandpepper 的评论。要将 onClickListeners 设置为按钮,您可以执行以下操作。

protected void Page_Load(object sender, EventArgs e)
    {
        var url = ConfigurationManager.AppSettings["DocuSign.TokenEndPoint"];
        var data = $"grant_type=authorization_code=&{Request.QueryString["Code"]}";

        WebRequest req = WebRequest.Create(url);
        req.Method = "POST";
        req.ContentLength = data.Length;
        req.ContentType = "application/json; charset=UTF-8";

        UTF8Encoding enc = new UTF8Encoding();
        var code64 = Convert.ToBase64String(enc.GetBytes($"{ConfigurationManager.AppSettings["DocuSign.ClientId"]}:{ConfigurationManager.AppSettings["DocuSign.ClientSecret"]}"));
        req.Headers.Add("Authorization", "Basic " + code64);

        using (Stream ds = req.GetRequestStream())
        {
            ds.Write(enc.GetBytes(data), 0, data.Length);
        }

        WebResponse wr = req.GetResponse();
        Stream receiveStream = wr.GetResponseStream();
        StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
        string content = reader.ReadToEnd();
        Response.Write(content);

    }