অ্যান্ড্রয়েড ওয়েবভিউ স্টাইলের ব্যাকগ্রাউন্ড-রঙ: অ্যান্ড্রয়েড ২.২ এ স্বচ্ছ উপেক্ষা করা হয়েছে


156

আমি স্বচ্ছ পটভূমি সহ একটি ওয়েবভিউ তৈরির জন্য সংগ্রাম করছি।

webView.setBackgroundColor(0x00FFFFFF);
webView.setBackgroundDrawable(myDrawable);

তারপরে আমি এইচটিএমএল পৃষ্ঠাটি লোড করছি

<body style="background-color:transparent;" ...

ওয়েবভিউজের পটভূমির রঙ স্বচ্ছ তবে পৃষ্ঠাটি লোড হওয়ার সাথে সাথেই এটি HTML পৃষ্ঠার কালো পটভূমিতে ওভাররাইট করা হয়েছে। এটি কেবল অ্যান্ড্রয়েড ২.২ এ ঘটে, এটি অ্যান্ড্রয়েড ২.১ এ কাজ করে।

তাহলে কি এইচটিএমএল পৃষ্ঠাগুলি কোডটিকে সত্যিকারের স্বচ্ছ করতে যোগ করার মতো কিছু আছে?


1
আমি দুঃখের সাথে বলতে চাই, তবে আমার সমস্যার জন্য এখানে তালিকাভুক্ত কোনও সমাধান কাজ করে নি ...: = (যাইহোক যাইহোক .. ওয়েবপৃষ্ঠা সর্বদা একটি সাদা পটভূমি ব্যবহার করেছিল ...
সিভি 2

উত্তর:


291

এটি আমার পক্ষে কাজ করেছে,

mWebView.setBackgroundColor(Color.TRANSPARENT);

1
আপনি কি সত্যিই ওএস ২.২ এ পরীক্ষা করেছেন?
jptsetung

87
আমি দেখতে পেলাম যে ইউআরএল বা ডেটা লোড করার পরে এটিকে ডাকতে হবে ।
চিহ্নিত করুন

11
আপনি যদি ব্যবহার করেন তবে এটি অ্যান্ড্রয়েড 3.x এ কাজ করে নাandroid:hardwareAccelerated="true"
ম্যাকার্স

2
নোট করুন যে উপরের মন্তব্যগুলি ছাড়াও আইসিএসে (4.0.3); এপিআই স্তর 10 নিয়ে কাজ করার জন্য স্বচ্ছতা পেতে আমাকে "সেটিংস -> বিকাশকারী বিকল্পগুলি -> জিপিইউ রেন্ডারিং জোর করে" অক্ষম করতে হয়েছিল -
আকি

10
এই উত্তরটি কেন এত বেশি ভোট পায় তা আমি এখনও বুঝতে পারি না। webView.setBackgroundColor (0x00000000); ওয়েবভিউ.সেটব্যাকগ্রাউন্ড কালার (0x00FFFFFF) এর মতোই; আলফা মান 0x00।
jptsetung

128

পূর্বে উল্লিখিত ইস্যুটির নীচে একটি সমাধান রয়েছে। এটি 2 সমাধানের সংমিশ্রণ।

webView.setBackgroundColor(Color.TRANSPARENT);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

ইউআরএল লোড করার পরে এই কোডটি ওয়েবভিউয়ারে যুক্ত করার সময় এটি কাজ করে (এপিআই 11+)।

এমনকি হার্ডওয়্যার ত্বরণ চালু থাকলে এটি কাজ করে


2
ওয়েবভিউ স্ক্রোলযোগ্য না হওয়া পর্যন্ত এটি কাজ করে।
রানি ইশাক

স্যামসাং এস 3
নিউইর্ল্ড

7
ওয়েবভিউ.সেটব্যাকগ্রাউন্ড কালার (কালার.আরজিবি (1, 0, 0, 0)); আপনি যদি স্ক্রোলটিতে কোনও পটভূমিতে ঝাঁকুনি না চান
ট্রেন্ট বীজ

@ ট্রেন্ট আমি আপনার পদ্ধতিটি চেষ্টা করেছিলাম এবং যদি জেলি বিনের উপর ঝাঁকুনির সমস্যাটি ঠিক করা হয় তবে এখন এটি জিঞ্জারব্রেডে একটি কালো পটভূমি প্রদর্শন করে। অন্য কোন পরামর্শ?
টিয়াগো

2
এটি ওয়েবভিউয়ের জন্য হার্ডওয়্যার ত্বরণকে অক্ষম করে! ! এটি আমার কাছে স্পষ্ট ছিল না (এটি ব্যবহারের আগে এটি সন্ধান না করার জন্য আমাকে দোষ দিন:) এবং উত্তরের শেষ বাক্যটি বিপরীত ছাপ ফেলে leaves এটি আসলে কিছু, ভিডিও, UI 'তে রূপান্তরের, স্ক্রোল, ক্যানভাস ইত্যাদি একটি সম্ভাব্য কার্যসংক্রান্ত অনেকটা প্রভাবিত stackoverflow.com/a/17815574/2487876
Kristjan Liiva

36

আমার একই সমস্যাটি ছিল ২.২ এর সাথে এবং ২.৩-এও। অ্যান্ড্রয়েডে নয় এইচটিএমএলে আলপা মান দিয়ে সমস্যার সমাধান করেছি। আমি অনেকগুলি চেষ্টা করেছিলাম এবং যা আমি জানতে পেরেছি তা হল setBackgroundColor();রঙটি আলফা মানের সাথে কাজ করে না। webView.setBackgroundColor(Color.argb(128, 0, 0, 0));কাজ করবে না.

সুতরাং এখানে আমার সমাধান, আমার জন্য কাজ।

      String webData = StringHelper.addSlashes("<!DOCTYPE html><head> <meta http-equiv=\"Content-Type\" " +
      "content=\"text/html; charset=utf-8\"> </head><body><div style=\"background-color: rgba(10,10,10,0.5); " +
      "padding: 20px; height: 260px; border-radius: 8px;\"> $$$ Content Goes Here ! $$$ </div> </body></html>");

এবং জাভাতে,

    webView = (WebView) findViewById(R.id.webview);
    webView.setBackgroundColor(0);
    webView.loadData(webData, "text/html", "UTF-8");

এবং এখানে নীচে আউটপুট স্ক্রিনশট।এখানে চিত্র বর্ণনা লিখুন


নিখুঁত তোমাকে ধন্যবাদ !
আয়মান মাহগুব

31

আসলে এটি একটি বাগ এবং এখনও অবধি কোনও কাজ খুঁজে পায়নি। একটি সমস্যা তৈরি করা হয়েছে। বাগটি এখনও মধুচক্রে এখানে।

আপনি যদি গুরুত্বপূর্ণ মনে করেন তবে এটি তারকাচিহ্নিত করুন: http://code.google.com/p/android/issues/detail?id=14749


22

আপনি এটি এইভাবে করেন:

প্রথমে আপনার প্রকল্পের ভিত্তি 11 তে করুন, তবে অ্যান্ড্রয়েডমেনিফিটে মিনিএসডিকে ভার্সন 8 এ সেট করুন

অ্যান্ড্রয়েড: হার্ডওয়্যারঅ্যাক্সিলারেটেড = "মিথ্যা" অপ্রয়োজনীয়, এবং এটি 8 এর সাথে বেমানান

wv.setBackgroundColor(0x00000000);
if (Build.VERSION.SDK_INT >= 11) wv.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

this.wv.setWebViewClient(new WebViewClient()
{
    @Override
    public void onPageFinished(WebView view, String url)
    {
        wv.setBackgroundColor(0x00000000);
        if (Build.VERSION.SDK_INT >= 11) wv.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
    }
});

সুরক্ষার জন্য আপনার স্টাইলটিতে এটি রাখুন:

BODY, HTML {background: transparent}

২.২ এবং ৪-এ আমার জন্য কাজ করেছেন


এটি আমার জন্য কাজ করে: অ্যান্ড্রয়েড: হার্ডওয়্যার
অ্যাক্সিলারেটেড

12

সবচেয়ে গুরুত্বপূর্ণ বিষয়টির কথা উল্লেখ করা হয়নি।

এইচটিএমএলে অবশ্যই সেট bodyসহ একটি ট্যাগ থাকতে background-colorহবে transparent

সুতরাং সম্পূর্ণ সমাধানটি হ'ল:


এইচটিএমএল

    <body style="display: flex; background-color:transparent">some content</body>

কার্যকলাপ

    WebView wv = (WebView) findViewById(R.id.webView);
    wv.setBackgroundColor(0);
    wv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    wv.loadUrl("file:///android_asset/myview.html");

এটি প্রশ্নের উল্লেখ করা হয়েছে। তবে এটি আপনার অ্যান্ড্রয়েড সংস্করণে কাজ করতে চাইলে আপনাকে যা করতে হবে তা একটি দুর্দান্ত পুনরায় শুরু বলে মনে হচ্ছে।
jptsetung

9

নীচের কোডটি অ্যান্ড্রয়েড +.০+ এর জন্য দুর্দান্ত কাজ করে তবে আপনি যখন এই কোডটি অ্যান্ড্রয়েড 3.0 এর নীচে চেষ্টা করেন তখন আপনার অ্যাপটি জোর করে বন্ধ করে দেওয়া হয়।

webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

আপনার নীচে ততকালীন এপিআই 11 তে কোড নীচে চেষ্টা করুন ।

webview.setBackgroundColor(Color.parseColor("#919191"));

অথবা

আপনি কোডের নীচেও চেষ্টা করতে পারেন যা সমস্ত এপিআই সূত্রে কাজ করে ।

    webview.setBackgroundColor(Color.parseColor("#919191"));
    if (Build.VERSION.SDK_INT >= 11) {
        webview.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
    }

উপরে কোড আমার জন্য পূর্ণ ব্যবহার।


আমি আপনাকে লাইয়ারটাইপ LAYER_TYPE_SOFTWARE এ সেট করার পরামর্শ দিচ্ছি না। এটি ক্রমশ বিশেষত স্ক্রোল করার সময় কর্মক্ষমতা হ্রাস করে।
নাভেরার

8

চেষ্টা webView.setBackgroundColor(0);


1
ওয়েবভিউ.সেটব্যাকগ্রাউন্ড কালার (0x00FFFFFF) এর মধ্যে কোনও পার্থক্য নেই; এবং ওয়েবভিউ.সেটব্যাকগ্রাউন্ড কালার (0x00); দুজনেরই স্বচ্ছ রঙ হওয়ার কথা।
jptsetung

7

আমার কাছে কোডের কাজ অনুসরণ করা হচ্ছে, যদিও আমার একাধিক ওয়েবভিউ রয়েছে এবং তাদের মধ্যে স্ক্রোলিং কিছুটা আলগা।

v.setBackgroundColor(Color.TRANSPARENT);
Paint p = new Paint();
v.setLayerType(LAYER_TYPE_SOFTWARE, p); 

3
এটি হানিকম্বের জন্য কাজ করে তবে দুর্ভাগ্যক্রমে আইসিএসে নয়। অভিশাপ। তবে আপনি যদি এটি ব্যবহার করেন তবে এটি "অ্যান্ড্রয়েড: লেয়ারটাইপ" বৈশিষ্ট্যটি ব্যবহার করে লেআউট ফাইলে উল্লেখ করা আরও সহজ is
1'12 সোভেন

2
আইসিএসে এমনকি যা কাজ করছে তা হ'ল উপাদানটির android:hardwareAccelerated="false"জন্য অ্যান্ড্রয়েড ম্যানিফেস্টে ব্যবহার করে পুরো ক্রিয়াকলাপের জন্য হার্ডওয়্যার ত্বরণকে নিষ্ক্রিয় করা activity
22

1
পেইন্ট অবজেক্ট তৈরি করার অপ্রয়োজনীয়তা রয়েছে। v.setLayerType(LAYER_TYPE_SOFTWARE, null);এছাড়াও কাজ করবে।
সের্গেই গ্লোটোভ


6
  • উপরোক্ত সবকিছু চেষ্টা করার পরে। আমি এটা ব্যাপার হয় আপনি নির্দিষ্ট করে না পাওয়া
    webView.setBackgroundColor(Color.TRANSPARENT)আগে বা পরে loadUrl()/ loadData()
  • যে বিষয়টি গুরুত্বপূর্ণ তা হ'ল আপনাকে android:hardwareAccelerated="false"ম্যানিফেস্টে স্পষ্টভাবে ঘোষণা করা উচিত ।

আইসক্রিম স্যান্ডউইচ পরীক্ষিত


3

শুধু এই লাইন ব্যবহার করুন .....

webView.loadDataWithBaseURL(null,"Hello", "text/html", "utf-8", null);
webView.setBackgroundColor(0x00000000);

এবং একটি পয়েন্ট মনে রাখবেন যা ওয়েবভিউতে ডেটা লোড করার পরে সর্বদা পটভূমির রঙ সেট করে।


3
webView.setBackgroundColor(0x00000000);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

এটি অবশ্যই কাজ করবে .. এডিটবগ্রাউন্ড সহ এক্সএমএলে ব্যাকগ্রাউন্ড সেট করুন। এখন যে পটভূমি প্রদর্শিত হবে


2

এইচটিএমএল লোড করার পরে বিজি সেট করুন (দ্রুত পরীক্ষাগুলি থেকে মনে হচ্ছে এইচটিএমএল লোড করা বিজি রঙকে পুনরায় সেট করে .. এটি ২.৩ এর জন্য)।

যদি আপনি ইতিমধ্যে প্রাপ্ত ডেটা থেকে এইচটিএমএল লোড করছেন, কেবলমাত্র একটি পোষ্টডেলিড করছেন যা আপনি সবেমাত্র বিজি সেট করেছেন (উদাহরণস্বরূপ স্বচ্ছ) ..


2

যদি ওয়েবভিউ স্ক্রোলযোগ্য হয়:

  1. এটি ম্যানিফেস্টে যুক্ত করুন:

    android:hardwareAccelerated="false"

অথবা

  1. লেআউটে ওয়েবভিউতে নিম্নলিখিতগুলি যুক্ত করুন:

    android:background="@android:color/transparent"
    android:layerType="software"
  2. নীচে পিতামাতার স্ক্রোল ভিউতে যুক্ত করুন:

    android:layerType="software"

0

ওয়েবভিউ.সেটব্যাকগ্রাউন্ড কালার (কালার.পর্সকলার ("# সংযুক্ত")) চেষ্টা করুন;


0

আমি আমার জিএল ভিউয়ের উপর একটি স্বচ্ছ এইচটিএমএল ওভারলে রাখার চেষ্টা করছিলাম তবে এটিতে সবসময় কালো জ্বলজ্বল থাকে যা আমার জিএল ভিউটি coversেকে দেয়। এই ঝলকানি থেকে মুক্তি পাওয়ার চেষ্টা করার পরে বেশ কয়েক দিন পরে আমি এই কার্যকারিতাটি পেয়েছি যা আমার কাছে গ্রহণযোগ্য (তবে অ্যান্ড্রয়েডের জন্য লজ্জাজনক)।

সমস্যাটি হ'ল আমার দুর্দান্ত সিএসএস অ্যানিমেশনগুলির জন্য আমার হার্ডওয়্যার ত্বরণ প্রয়োজন এবং এটি আমার webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);পক্ষে কোনও বিকল্প নয়।

কৌশলটি ছিল WebViewআমার জিএল ভিউ এবং এইচটিএমএল ওভারলেটির মধ্যে একটি দ্বিতীয় (খালি) রাখার । এটি dummyWebViewআমি এসডাব্লু মোডে রেন্ডার করতে বলেছিলাম, এবং এখন আমার এইচটিএমএল ওভারলেগুলি এইচডব্লিউতে মসৃণ রেন্ডার করে এবং আরও কোনও কালো ঝাঁকুনি দেয় না।

আমার এসার আইকনিয়া এ 700 ছাড়া এটি অন্য ডিভাইসে কাজ করে কিনা আমি জানি না তবে আমি আশা করি আমি এটির সাহায্যে কাউকে সহায়তা করতে পারব।

public class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        RelativeLayout layout = new RelativeLayout(getApplication());
        setContentView(layout);

        MyGlView glView = new MyGlView(this);

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);

        dummyWebView = new WebView(this);
        dummyWebView.setLayoutParams(params);
        dummyWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        dummyWebView.loadData("", "text/plain", "utf8");
        dummyWebView.setBackgroundColor(0x00000000);

        webView = new WebView(this);
        webView.setLayoutParams(params);
        webView.loadUrl("http://10.0.21.254:5984/ui/index.html");
        webView.setBackgroundColor(0x00000000);


        layout.addView(glView);
        layout.addView(dummyWebView);
        layout.addView(webView);
    }
}

আমি এটি একটি গ্যালাক্সি নেক্সাসে পরীক্ষা করেছি এবং দুর্ভাগ্যক্রমে ঝাঁকুনি থেকে গেছে।
নাভেরার

0

এটি আমার পক্ষে কাজ করেছে। ডেটা লোড হওয়ার পরে পটভূমির রঙ সেট করার চেষ্টা করুন। আপনার ওয়েবভিউ অবজেক্টে সেই সেটওয়েভিউক্লিয়েন্টের জন্য:

    webView.setWebViewClient(new WebViewClient(){

        @Override
        public void onPageFinished(WebView view, String url)
        {
            super.onPageFinished(view, url);
            webView.setBackgroundColor(Color.BLACK);
        }
    });


0

যদি কোনও কিছুই সহায়তা না করে তবে সম্ভবত আপনি মাপগুলি স্থির করেছেন webView, প্রস্থ এবং উচ্চতাটিকে মোড়কে_আমার্জকে পরিবর্তন করুন বা match_parent, এটি কাজ করা উচিত। এটি আমার পক্ষে কাজ করেছিল যখন আমি একটি জিআইপি লোড করার চেষ্টা করি।


0

আপনি এটির মতো বাইন্ডিংএডাপ্টার ব্যবহার করতে পারেন:

জাভা

@BindingAdapter("setBackground")
public static void setBackground(WebView view,@ColorRes int resId) {
        view.setBackgroundColor(view.getContext().getResources().getColor(resId));
        view.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
}

এক্সএমএল:

<layout >

    <data>

        <import type="com.tdk.sekini.R" />


    </data>

       <WebView
            ...
            app:setBackground="@{R.color.grey_10_transparent}"/>

</layout>

সম্পদ

<color name="grey_10_transparent">#11e6e6e6</color>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.