많은 양의 작성된 콘텐츠를 Android 앱의 읽기 쉬운 페이지로 변환합니다. 이 콘텐츠는 주로 텍스트와 이미지로 구성되지만 표가 포함됩니다.이미지가로드 될 때 TableRow가 다른 TableRow를 겹치게합니다 - Android
콘텐츠가 html로 다운로드되므로 URLImageParser 클래스와 함께 Html.fromHtml() 메서드를 사용하여 콘텐츠를 표시합니다.
내 응용 프로그램에서 TableLayout을 사용하고 있습니다. 내 코드는 지금처럼 작동 : 콘텐츠에는 테이블이없는 경우
- 는 한 행에 모두 넣고 TableLayout을이 행을 추가
- 하나 개의 테이블이있는 경우, 이전에 모든 콘텐츠를 얻을 수 이 행을 넣고 행을 테이블 레이아웃에 추가하십시오. 이제 테이블의 각 행에 대해 내용을 가져 와서 이것을 테이블 레이아웃의 행으로 추가하십시오. 그런 다음 테이블 뒤의 모든 컨텐츠를 행에 추가하고 테이블 레이아웃에 추가하십시오.
- (등등 여러 테이블)이 코드는 잘 작동했다
, 나는에 실행 한 문제는 테이블 전에 내용이 이미지가 포함 된 경우입니다. 이 경우, 최초의 컨텐츠는, 이미지의로드가 완료하기 전에, 행으로서 TableLayout에 배치됩니다. 이미지로드가 완료되면이 tablerow의 크기가 이미지를 포함하도록 조정됩니다. 그러나 테이블 레이아웃의 다음 행은 그에 따라 아래로 이동하지 않습니다. 이것은 아래의 행이 첫 번째 tablerow와 겹치는 것을 의미합니다.
위의 행이 크기를 변경하면 아래 행을 조정하는 것이 이상적입니다. 가능한가요? 나는 온라인으로 보려고 노력해 왔으며 비슷한 것을 찾을 수 없었다.
나는 다른 접근법을 시도 해왔다. 나는 URL이 페이지 레이아웃에 추가되기 전에 URLImageParser가 이미지 로딩을 완료했을 때이를 감지하고 싶었다. (이는 내가 페이지를 열 때 잠시 멈출 것임을 의미한다) 하지만 나는이 일을 할 수 없다. 어떤 이유로 든 내 URLImageParser AsyncTask의 onPostExecute() 메서드가 호출되지 않습니다.
위의 행이 크기를 변경하면 tablerows를 다시 조정할 수있는 방법을 아는 사람이 있습니까? 또는로드 완료를 감지하려는 시도가 잘못되어있는 곳을 볼 수 있습니까? 부울 플래그 finishedExecuting을 사용하고 있지만 true로 설정되지 않습니다. 아래에 수업을 포함 시켰습니다.
감사합니다. 답장을 보내 주시면 감사하겠습니다.
URLImageParser.java는
public class URLImageParser implements ImageGetter {
Context c;
TextView container;
Activity a;
int intrinsicHeight;
int intrinsicWidth;
boolean finishedExecuting;
public URLImageParser(TextView t, Context c, Activity a) {
this.c = c;
this.container = t;
this.a = a;
intrinsicHeight =0;
intrinsicWidth = 0;
finishedExecuting = false;
}
public Drawable getDrawable(String source) {
System.out.println("getDrawable() was called");
URLDrawable urlDrawable = new URLDrawable();
ImageGetterAsyncTask asyncTask =
new ImageGetterAsyncTask(urlDrawable);
asyncTask.execute(source);
return urlDrawable;
}
public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> {
URLDrawable urlDrawable;
boolean usesImageNotFoundDrawable = false;
public ImageGetterAsyncTask(URLDrawable d) {
this.urlDrawable = d;
}
@Override
protected Drawable doInBackground(String... params) {
String source = params[0];
return fetchDrawable(source);
}
@Override
protected void onPostExecute(Drawable result) {
System.out.println("ENTERED ON POST EXECUTE");
//check to see if an image was found (if not could
//be due to no internet)
if(result ==null){
usesImageNotFoundDrawable = true;
//the drawable wasn't found so use the image not found
//png
Drawable imageNotFound = a.getResources().getDrawable(R.drawable.image_not_found);
result = imageNotFound;
} else {
usesImageNotFoundDrawable = false;
}
intrinsicHeight = result.getIntrinsicHeight();
intrinsicWidth = result.getIntrinsicWidth();
DisplayMetrics dm = new DisplayMetrics();
((WindowManager) c.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels -50;
int height = width * intrinsicHeight/intrinsicWidth;
result.setBounds(0, 0, 0 + width, 0
+ height);
urlDrawable.setBounds(0, 0, 0+width, 0+height);
urlDrawable.drawable = result;
URLImageParser.this.container.invalidate();
if(usesImageNotFoundDrawable == true){
URLImageParser.this.container.setHeight((URLImageParser.this.container.getHeight()
+ height*4));
} else {
URLImageParser.this.container.setHeight((URLImageParser.this.container.getHeight()
+ height));
}
// Pre ICS
URLImageParser.this.container.setEllipsize(null);
setFinishedExecuting(true);
System.out.println("END OF ON POST EXECUTE");
}
public Drawable fetchDrawable(String urlString) {
try {
InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");
return drawable;
} catch (Exception e) {
return null;
}
}
private InputStream fetch(String urlString) throws MalformedURLException, IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
HttpResponse response = httpClient.execute(request);
return response.getEntity().getContent();
}
}
public boolean getFinishedExecuting(){
return finishedExecuting;
}
public void setFinishedExecuting(boolean bool){
finishedExecuting = bool;
}
}