我正在使用给定here
的GifWebView我知道主要活动等工作正常,因为我在用于框架布局的XML实现之前测试了它。但是现在我正在使用Frame Layout,我遇到了问题。
我将为您提供我的代码和快速解释:
XML
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.example.dencallanan.giftestapp.GifWebView
android:id="@+id/GWebView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_marginBottom="153dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:hint="USERNAME" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText2"
android:layout_marginTop="58dp"
android:layout_alignTop="@+id/editText"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignLeft="@+id/editText"
android:layout_alignStart="@+id/editText"
android:hint="PASSWORD" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Log In"
android:id="@+id/button"
android:layout_below="@+id/editText2"
android:layout_centerHorizontal="true"
android:layout_marginTop="25dp" />
</RelativeLayout>
</FrameLayout>
GifWebView
public class GifWebView extends WebView {
public GifWebView(Context context, String path) {
super(context);
loadUrl(path);
}
public GifWebView(Context context, AttributeSet attrs, String path) {
super(context, attrs);
}
public GifWebView(Context context, AttributeSet attrs, int defStyle, String path) {
super(context, attrs, defStyle);
}
}
我认为我的问题就在这里。我在网上看到我应该添加上面提到的第二个构造函数方法。但似乎第一个是唯一使用的,即 - 后两个构造函数发出警告methods never used
。
也许我错了,但据说你需要这些构造函数来实现XML中的布局类,这些构造函数永远不会被使用......为什么?
以下两行在我的MainActivity中,只是为了帮助您了解正在发生的事情。
gWView = (GifWebView) findViewById(R.id.GWebView);
gWView = new GifWebView(this, "file:///android_asset/watg.gif");
我真的很感激任何帮助,这个问题已经持续了好几个小时。
问题
Android屏幕上没有显示任何内容......只是空白
编辑BLACKBELT
activity_main.xml中
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.example.dencallanan.giftestapp.GifWebView
android:id="@+id/GWebView"
android:layout_width="match_parent"
android:layout_height="match_parent"
myapp:fpath="watg" <!-- also tried "watg.gif" -->
/>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_marginBottom="153dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:hint="USERNAME" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText2"
android:layout_marginTop="58dp"
android:layout_alignTop="@+id/editText"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignLeft="@+id/editText"
android:layout_alignStart="@+id/editText"
android:hint="PASSWORD" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Log In"
android:id="@+id/button"
android:layout_below="@+id/editText2"
android:layout_centerHorizontal="true"
android:layout_marginTop="25dp" />
</RelativeLayout>
</FrameLayout>
attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="GifWebView">
<attr name="fpath" format="string" />
</declare-styleable>
</resources>
GifWebView.java
public class GifWebView extends WebView {
public GifWebView(Context context) {
super(context);
}
public GifWebView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.GifWebView);
CharSequence s = a.getString(R.styleable.GifWebView_fpath);
loadUrl(s.toString());
}
public GifWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.GifWebView);
CharSequence s = a.getString(R.styleable.GifWebView_fpath);
loadUrl(s.toString());
}
}
答案 0 :(得分:5)
你不应该重载View的构造函数。使用
public GifWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
和
public GifWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
并以编程方式提供not-default-parameters或为自定义View
定义自定义属性