小编The*_*Dev的帖子

Android无边框按钮

不想成为第三个问这个问题的人,但前两个 问题似乎没有完全回答.Android设计指南详细介绍了无边框按钮,但没有详细说明如何制作它们.在之前的一个答案中,有一个消息使用:

style="@android:style/Widget.Holo.Button.Borderless"

这适用于Holo主题,但我也使用了很多Holo.Light

style="@android:style/Widget.Holo.Light.Button.Borderless"

似乎不存在.有没有办法在Holo.Light中应用这种无边框按钮的样式,或者更好的是,只需应用无边框标签而不指定它所属的主题,这样应用程序可以在运行时选择合适的样式?

Holo.ButtonBar似乎适合我正在寻找的账单,除了它没有提供用户反馈它被按下.

此外,文档中是否有一个位置列出了可以应用的样式以及它们的描述?无论我谷歌多少,搜索文档,我都找不到任何东西.如果我右键单击并编辑样式,则只有一个非描述性列表.

任何帮助,将不胜感激.

编辑:从javram得到了一个完美的答案,我想为有兴趣添加谷歌采用的部分边界的人添加一些XML.

Fora水平分隔线,这个效果很好

<View
    android:id="@+id/horizontal_divider_login"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:background="@color/holo_blue" />
Run Code Online (Sandbox Code Playgroud)

这是一个垂直的:

<View
     android:id="@+id/vertical_divider"
     android:layout_width="1dip"
     android:layout_height="match_parent"
     android:layout_marginBottom="8dp"
     android:layout_marginTop="8dp"
     android:background="@color/holo_blue" />
Run Code Online (Sandbox Code Playgroud)

android styles view

26
推荐指数
4
解决办法
4万
查看次数

在操作栏中更改菜单项的视图

我正在尝试在我的应用中实现刷新按钮,以允许用户手动重新同步到Web服务器.代码有效,但我无法弄清楚动作视图(至少,我认为这是我应该使用的).

我的菜单项目在这里:

<item
    android:id="@+id/main_menu_refresh"
    android:enabled="true"
    android:icon="@drawable/refresh"
    android:orderInCategory="1"
    android:showAsAction="ifRoom"
    android:title="@string/refresh" 
    android:actionViewClass="android.widget.ProgressBar">
</item>
Run Code Online (Sandbox Code Playgroud)

问题是,它总是显示ProgressBar.我想知道它是否像搜索小部件(我真正在网上看到的唯一例子)一样工作,并将collapseActionView标签添加到showAsAction并且阻止它立即显示.但是,当我单击刷新按钮时,图标会消失(好),但操作栏中的标题也会消失,并且ProgressBar会出现在标题所在的窗口左侧.也不是我想要的.

作为最后的努力,我试图将其添加到我的代码中,并actionViewClass从XML中删除:

MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
Log.w("MyApp", "Have Menu");
ProgressBar pb = new ProgressBar(ReadingList.this);
refresh.setActionView(pb);
Run Code Online (Sandbox Code Playgroud)

这也没用,给我一个空指针错误setActionView.

我需要一个可以从任何函数调用的解决方案(开头有一个自动同步周期,我希望ProgressBar也可以显示),然后能够将它返回到它的静态图标.

我尝试阅读这个问题,但我无法理解答案意味着什么.我觉得我试图按照它说的做,但我想不是.非常感谢任何帮助.

编辑:对于sastraxi的建议.

public class IconSwitcher extends LinearLayout{



public IconSwitcher(Context context) {
    super(context);

    ProgressBar pb = new ProgressBar(context);
    ImageView iv = new ImageView(context);

    addView(iv);
    addView(pb);
}
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的班级.但是,当我尝试引用它时:

MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
IconSwitcher ic = (IconSwitcher) refresh.getActionView();
Run Code Online (Sandbox Code Playgroud)

我得到一个空指针错误.创建IconSwitcher.按钮XML如下:

<item
    android:id="@+id/main_menu_refresh"
    android:enabled="true"
    android:icon="@drawable/refresh"
    android:orderInCategory="1" …
Run Code Online (Sandbox Code Playgroud)

android actionview android-actionbar

7
推荐指数
1
解决办法
2万
查看次数

Android片段未保存状态

我最近将我的应用程序从基于活动的应用程序转换为基于片段的应用程序。这是一个保持得分的应用程序,当我进行一项活动时,我很容易保存和恢复得分。但是,这似乎并不是一个片段。这是我的代码:

 @Override
public void onSaveInstanceState(Bundle savedInstanceState){
    super.onSaveInstanceState(savedInstanceState);

    if(t!=null&&flag==1){
        savedInstanceState.putInt("time", t.getTimeLeft());
    } else {
        savedInstanceState.putInt("time", 0);
    }

    savedInstanceState.putIntArray("score_array", points);
    savedInstanceState.putIntArray("position_array", spinnerPosition);
    savedInstanceState.putBooleanArray("checked_array", shouldBeChecked);

    flag = 0;
    Log.d("MyApp", "savingState");
}

@Override
public void onActivityCreated(Bundle savedInstanceState){
    super.onActivityCreated(savedInstanceState);

    Log.d("MyApp", "onActivityCreated");

    try {
        int timeLeft = savedInstanceState.getInt("time");

        points = savedInstanceState.getIntArray("score_array").clone();
        spinnerPosition = savedInstanceState.getIntArray("position_array").clone();
        shouldBeChecked = savedInstanceState.getBooleanArray("checked_array").clone();

        ((BaseAdapter) ((ListView)getView().findViewById(R.id.missionList)).getAdapter()).notifyDataSetChanged();

        if(timeLeft!=0){
            flag=1;

            this.getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

            t = new TimerClass(timeLeft*1000, 1000);
            t.setViews((TextView)getView().findViewById(R.id.minuteView), (TextView)getView().findViewById(R.id.tenSecondView), (TextView)getView().findViewById(R.id.secondView), (Button)getView().findViewById(R.id.start_button));
            ((Button)getView().findViewById(R.id.start_button)).setText(R.string.stop);
            t.start();
        }
    } catch (Exception e) {
        e.printStackTrace();
    } 

}
Run Code Online (Sandbox Code Playgroud)

I used this exact …

android savestate android-fragments

5
推荐指数
1
解决办法
4070
查看次数

你能用字符串调用字符串资源吗?

我有一个方法从EditText返回大约20个可能的字符串之一.这些字符串中的每一个都有相应的响应,可以在strings.xml中的T​​extView中打印.有没有办法使用类似的东西从strings.xml调用字符串context.getResources().getString(R.strings."stringFromMethod")?还有另一种方法从这样的大型列表中调用字符串吗?

我能想到的唯一方法是将每个字符串转换为int,并使用它来查找字符串数组或switch语句中的字符串.这两个都涉及一个巨大的if-else if语句将字符串转换为int,并且如果添加或删除任何字符串我将更有可能错过一个并且有趣的bug会采取足够的步骤来改变狩猎.干净利落的想法吗?

编辑:忘了添加,我尝试使用的另一种方法是从中获取resourceID

int ID = context.getResources().getIdentifier("stringFromMethod", "String", context.getPackageName())
Run Code Online (Sandbox Code Playgroud)

并取整数并将其放入

context.getResources().getString(ID)
Run Code Online (Sandbox Code Playgroud)

这看起来似乎也没有用.

android android-xml android-resources

1
推荐指数
1
解决办法
114
查看次数