我有一个带有webview的AppCompatActivity,并从RAW文件夹加载html。我的XML中包含工具栏。奇怪的是工具栏没有显示出来。
要做到以下几点:我正在尝试以下内容:
工具栏XML
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<WebView
android:id="@+id/loadHTMLView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
<ProgressBar
android:id="@+id/progressBarView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:indeterminate="true" />
</RelativeLayout>
Java文件:
@SuppressLint("SimpleDateFormat")
public class AboutUsActivity extends AppCompatActivity
{
private WebView webView;
private ProgressBar mIndeterminateProgress;
private AsyncTask<Void, Void, String> mLicenseLoader;
private String versionName;
private String deviceId;
private Toolbar mActionBar;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.aboutus);
mActionBar = (Toolbar) findViewById(R.id.toolbar);
if (mActionBar != null)
{
setSupportActionBar(mActionBar);
}
getSupportActionBar().setTitle(getResources().getString(R.string.aboutUS));
mActionBar.setNavigationIcon(getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha));
mActionBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
try
{
versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
deviceId = Secure.getString(this.getContentResolver(), Secure.ANDROID_ID);
}
catch (NameNotFoundException e)
{
e.printStackTrace();
}
mIndeterminateProgress = (ProgressBar)findViewById(R.id.progressBarView);
webView = (WebView) findViewById(R.id.loadHTMLView);
loadaboutus();
}
private void loadaboutus()
{
mLicenseLoader = new AsyncTask<Void, Void, String>()
{
@Override
protected String doInBackground(Void... params)
{
InputStream rawResource = getResources().openRawResource(R.raw.about_us);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(rawResource));
String line;
StringBuilder sb = new StringBuilder();
try
{
while ((line = bufferedReader.readLine()) != null)
{
if (line.equalsIgnoreCase("<p>Version:</p>"))
{
line = "<p>Version: " + versionName + "</p>";
}
if (line.equalsIgnoreCase("<p>Device Id:</p>"))
{
line = "<p>Device Id: " + deviceId + "</p>";
}
sb.append(line);
sb.append("\n");
}
bufferedReader.close();
}
catch (IOException e)
{
}
return sb.toString();
}
@Override
protected void onPostExecute(String licensesBody)
{
super.onPostExecute(licensesBody);
if (isCancelled()) return;
mIndeterminateProgress.setVisibility(View.INVISIBLE);
webView.setVisibility(View.VISIBLE);
webView.loadDataWithBaseURL(null, licensesBody, "text/html", "utf-8", null);
mLicenseLoader = null;
}
}.execute();
}
@Override
public void onDestroy()
{
super.onDestroy();
if (mLicenseLoader != null)
{
mLicenseLoader.cancel(true);
}
}
}
然后我意识到我是否评论loadaboutus();工具栏正确加载。
可能有什么不对?有人可以帮助我吗?
谢谢!
答案 0 :(得分:1)
这与 AsyncTask 无关。
您尚未在相对布局中定义视图元素的位置。使用 layout_below 属性。
使用类似的东西:
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<WebView
android:id="@+id/loadHTMLView"
android: layout_below= "@id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
<ProgressBar
android:id="@+id/progressBarView"
android: layout_below= "@id/loadHTMLView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:indeterminate="true" />
答案 1 :(得分:0)
您应该在本地创建一个新的AsyncTask,指定&lt;输入参数,进展参数,输出结果&gt; 。或者使用Service class和Broadcast receiver。
答案 2 :(得分:0)
您的WebView
似乎覆盖了您的工具栏。试试这个:
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<WebView
android:id="@+id/loadHTMLView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar" />
这会将工具栏下方的WebView
置于屏幕Y坐标义上,而不是Z顺序感中。