안드로이드 개발 질문/답변
(글 수 45,052)
APIDemo 에 있는 ProgressBar-2 예제에서 제가 찾던 로딩 애니메이션을 찾았습니다.
간단한 new project 에 여기 코드를 옮겨서 실행해 보니 애니메이션이 잘되네요.
하지만. 이것을 WebView 위에 올려서 로딩 되는 동안 보이게 하려니 쉽게 안되네요.
== main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ProgressBar android:id="@+android:id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<WebView android:id="@+id/WebView01" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="fill_parent"></WebView>
그리고 activity 에서
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.main);
wvc = (WebView)findViewById(R.id.WebView01);
wvc.getSettings().setJavaScriptEnabled(true);
setProgressBarVisibility(true);
wvc.loadUrl("http://m.naver.com");
wvc.setWebViewClient(new WebViewClient()
{
@Override
public void onPageFinished(WebView view, String url)
{
setProgressBarVisibility(false);
}
});
이렇게 했는데...역시나...로딩 먼저 뜨고..WebView 가 그위에 덮어서 보이고 있습니다.
Progressbar 의 로딩 이미지를 WebView 와 어떻게 엮을 수 있을까요?
구글링에도 Progressbar, setProgressBarVisibility 와 WebView 는 거의 정보가 없네요...헐...
도움 부탁드립니다.
간단한 new project 에 여기 코드를 옮겨서 실행해 보니 애니메이션이 잘되네요.
하지만. 이것을 WebView 위에 올려서 로딩 되는 동안 보이게 하려니 쉽게 안되네요.
== main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ProgressBar android:id="@+android:id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<WebView android:id="@+id/WebView01" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="fill_parent"></WebView>
그리고 activity 에서
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.main);
wvc = (WebView)findViewById(R.id.WebView01);
wvc.getSettings().setJavaScriptEnabled(true);
setProgressBarVisibility(true);
wvc.loadUrl("http://m.naver.com");
wvc.setWebViewClient(new WebViewClient()
{
@Override
public void onPageFinished(WebView view, String url)
{
setProgressBarVisibility(false);
}
});
이렇게 했는데...역시나...로딩 먼저 뜨고..WebView 가 그위에 덮어서 보이고 있습니다.
Progressbar 의 로딩 이미지를 WebView 와 어떻게 엮을 수 있을까요?
구글링에도 Progressbar, setProgressBarVisibility 와 WebView 는 거의 정보가 없네요...헐...
도움 부탁드립니다.
WebView 위에 올라갈 수 있는 것은 결국..Dialog 밖에는 없네요...
그러면,.. ProgressDialog 를 customize 해야 될텐데...바탕 박스 없이.. 왼쪽에 회전하는 아이콘만 남도록 말이죠.
그래서 찾았더니...
public class MyProgressDialog extends Dialog {
public static MyProgressDialog show(Context context, CharSequence title,
CharSequence message) {
return show(context, title, message, false);
}
public static MyProgressDialog show(Context context, CharSequence title,
CharSequence message, boolean indeterminate) {
return show(context, title, message, indeterminate, false, null);
}
public static MyProgressDialog show(Context context, CharSequence title,
CharSequence message, boolean indeterminate, boolean cancelable) {
return show(context, title, message, indeterminate, cancelable, null);
}
public static MyProgressDialog show(Context context, CharSequence title,
CharSequence message, boolean indeterminate,
boolean cancelable, OnCancelListener cancelListener) {
MyProgressDialog dialog = new MyProgressDialog(context);
dialog.setTitle(title);
dialog.setCancelable(cancelable);
dialog.setOnCancelListener(cancelListener);
/* The next line will add the ProgressBar to the dialog. */
dialog.addContentView(new ProgressBar(context), new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
dialog.show();
return dialog;
}
public MyProgressDialog(Context context) {
super(context, R.style.NewDialog);
}
와 styles.xml 에
<style name="NewDialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTitleStyle">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:background">@android:color/transparent</item>
</style>
를 추가하라고 하네요... http://efreedom.com/Question/1-3225889/Center-Progress-Indicator-ProgressDialog-Easily-Title-Text-Passed-Along
여기에서요..
그런데.. 실제
protected Dialog onCreateDialog(int id) {
switch(id) {
case PROGRESS_DIALOG:
progressDialog = new MyProgressDialog(this);
progressDialog.setCancelable(true);
progressThread = new ProgressThread(handler);
progressThread.start();
return progressDialog;
default:
return null;
}
}
정의하고 showDialog(0) ; 하니..아예 다이알로그가 뜨지를 않네요.
위에서 처럼 코딩하는 경우는 호출하는 방법이 다른건가요?
위에 show 메서드만 모두 재정의했는데..실제..show 를 호출해서 다이알로그를 띄우는 코드는 한번도 본적이 없는데...
어떻게 위의 코드를 활용하면..잘될수 있을까요? 오늘은 너무 늦어서...이만..