Проблема отображает контент в WebVew внутри IndestedScrollView - если удалить вложенную strestedscrollview его рабочее пAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Проблема отображает контент в WebVew внутри IndestedScrollView - если удалить вложенную strestedscrollview его рабочее п

Сообщение Anonymous »

Я должен загрузить HTML -контент в WebView внутри вложенного ScrollView, но Wehn ​​я загружаю контент, некоторые из контента исчезают и отображают пробел. Белый экран и содержимое копирования копируются в буфер обмена. < /p>

Код: Выделить всё






















< /code>
ниже мой код Java < /p>
package com.tops.webviewgs

import android.R
import android.content.Context
import android.graphics.Bitmap
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.KeyEvent
import android.view.MotionEvent
import android.view.View
import android.webkit.ConsoleMessage
import android.webkit.WebChromeClient
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebView.setWebContentsDebuggingEnabled
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
import androidx.core.widget.NestedScrollView
import com.tops.webviewgs.databinding.ActivityMainBinding
import java.io.BufferedReader
import java.io.InputStreamReader

class MainActivity : AppCompatActivity() {

lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

val htmlContent = readHtmlFromAssets(this, "news.html")
loadDetailsDataIntoWebview(binding.webview, htmlContent, 0)
}

fun readHtmlFromAssets(context: Context, fileName: String): String {
return try {
val inputStream = context.assets.open(fileName)
val reader = BufferedReader(InputStreamReader(inputStream))
val stringBuilder = StringBuilder()
var line: String?
while (reader.readLine().also { line = it } != null) {
stringBuilder.append(line).append("\n")
}
reader.close()
stringBuilder.toString()
} catch (e: Exception) {
e.printStackTrace()
"Error reading file"
}
}

private fun loadDetailsDataIntoWebview(
wvNewsDetail: WebView?,
articleContent: String,
from: Int
) {
wvNewsDetail?.apply {
// WebView settings
//            clearHistory()
//            clearCache(true)

settings.apply {
javaScriptEnabled = true
domStorageEnabled = true
defaultFontSize = 20
loadWithOverviewMode = true
useWideViewPort = false
databaseEnabled = true
loadsImagesAutomatically = true
cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
mediaPlaybackRequiresUserGesture = true
layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING
mixedContentMode = WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE

offscreenPreRaster = true
allowFileAccess = true
allowContentAccess = true
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mixedContentMode = 0;
setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
}

// Prevent WebView from being reset
isVerticalScrollBarEnabled = true
overScrollMode = WebView.OVER_SCROLL_NEVER
scrollBarStyle = View.SCROLLBARS_INSIDE_INSET

webViewClient = object : WebViewClient() {

override fun shouldInterceptRequest(
view: WebView?,
request: WebResourceRequest?
): WebResourceResponse? {
val blockedUrls = listOf(
"ads.js",
"tracking.js",
"some-script.js"
) // Add problematic scripts here
if (request?.url.toString().contains(blockedUrls.toString())) {
Log.e("WEBVIEW", "Blocked script:  ${request?.url}")
return WebResourceResponse("text/plain", "utf-8", null) // Block the script
}
return super.shouldInterceptRequest(view, request)
}

@Deprecated("Deprecated in Java")
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
return false
}

override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
}

override fun onPageStarted(view: WebView, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
}
}

webChromeClient = object : WebChromeClient() {
override fun onConsoleMessage(consoleMessage: ConsoleMessage?): Boolean {
consoleMessage?.message()?.let {
Log.e("JS_ERROR", it)
}
return true
}
}

setOnKeyListener(object : View.OnKeyListener {

override fun onKey(v: View, keyCode: Int, event: KeyEvent): Boolean {
if (event.action != KeyEvent.ACTION_DOWN) {
when (event.keyCode) {
KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_VOLUME_DOWN ->                 // Handle volume key events as needed
return true // Consume the event
}
}
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (canGoBack()) {
goBack()
return true
} else {
Log.e(
"WEBVIEW",
"BACK PRESSED")
return true
}

}

return false

}
})

setWebContentsDebuggingEnabled(true)
loadDataWithBaseURL("about:blank", articleContent, "text/html", "UTF-8", null)
//            loadUrl("file:///android_asset/news.html")
}
}

}
Вот вывод, который я получил из кода

Подробнее здесь: https://stackoverflow.com/questions/794 ... -nestedscr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»