当我尝试以编程方式更改 ToolBar 时,我遇到了一些麻烦。
当我从代码中更改 ToolBar 标题时,当我在真实设备上运行程序时,我的工具栏标题是“MyAppName @ 2131558664”,但我只设置了“MyAppName”
我还有 ViewPager 带片段,在其中一个片段中我得到工具栏并更改工具栏菜单(添加 SearchView ),当我也启动程序并打开 SearchView 我的查询也包含此“@ 2131558664”。为什么会这样?我该如何解决? 感谢回复
Toolbar.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="?android:actionBarSize"
app:theme="@style/MyToolBar"
android:layout_centerHorizontal="true"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark">
</android.support.v7.widget.Toolbar>
MyToolBar主题:
<style name="MyToolBar" parent="Theme.AppCompat.Light">
<item name="android:text">@style/TextAppearance.Widget.Event.Toolbar.Title</item>
<item name="android:windowActionBarOverlay">true</item>
<!-- Support library compatibility -->
<item name="windowActionBarOverlay">true</item>
<item name="android:textColorPrimary">@color/colorAccent</item>
<item name="android:textColorSecondary">@color/colorAccent</item>
</style>
我更改工具栏:
的代码段 Toolbar toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setTitle("MyAppName");
答案 0 :(得分:0)
之所以发生这种情况,是因为你写了“android:text”而不是文本,你传递了一个主题,而不是文本,因为你引用了一个对象而不是一个字符串,你得到了 - @ 2131558664。 由于您添加了一段代码来设置标题,因此您实际连接了两个字符串。 它有点像写作:
setTitle("my app" + "@2131558664");
作为参考,如果您将查找您的R文件(如在R.id.my_textView中),例如,您将看到一个填充了这些文件的大文件:
int attr actionBarTheme 0x7f010060
int attr actionBarWidgetTheme 0x7f010061
所以我猜测文本“@ 2131558664”指的是该主题的id。
您还需要了解的一些事情:
1.R文件中的每个id实际上都是一个int,即使它中有一个字母。
2.如果您在TextView或任何类似的任何小部件上使用“toString()”方法,您将获得类似的结果,除非它是一个字符串然后您将获得字符串本身。
3.用户无法编辑R文件,以及为什么必须使用id方法查找视图,该方法实际上通过id将对象连接到您正在创建的对象。
一个很好的例子是从文本中获取文本和编辑文本
EditText et = (EditText) findViewById(R.id.editText);
//EditText - this is the object you create
//R.id.editText - thats the int in the memory
et.getText();
//XXXXX this is thee wrong way to get a string from edit text since
//its return and editable and if you will pass it to a text view you
//will get the int with represent the id in the memory.
et.getText().toString();
//this is the right way to get a string from an edit text since it
//return a string
你应该尝试一下,只是为了娱乐和知识= D
答案 1 :(得分:0)
尝试将字符串移动到string.xml文件并使用getResources().getString(R.string.appTitle);
从string.xml读取字符串。
还尝试清理项目并检查xml上是否有任何遗漏或错误 资源文件
答案 2 :(得分:0)
好的,我已经解决了我的问题。 当我删除
时,这个奇怪的文字消失了 <item name="android:text">@style/TextAppearance.Widget.Event.Toolbar.Title</item>
我不知道为什么会发生这种情况,如果有人知道请解释我。