অ্যান্ড্রয়েড কীভাবে প্রয়োগ করবেন: প্রসারিত হয় না এমন ব্যাকগ্রাউন্ড?


100

আমি এই দুর্দান্ত থ্রেডটি "কীভাবে কেক খাওয়া এবং এটিও রাখি", Buttonতার পরিবর্তে ImageButton(যা মঞ্জুরি দেয় না SetText(), পুনরায় আকার দেয় না ইত্যাদি) এর জন্য চিত্রটি ব্যবহার করে তা বর্ণনা করে দেখতে পেয়েছি ।

দেখুন বৈশিষ্ট্যটি ব্যবহার করে এটি অর্জন করা হয়েছে:

android:background="@drawable/bgimage"

এটির সাথে একমাত্র সমস্যা হ'ল এটি বোতামের আকারের মাপসই চিত্রটি প্রসারিত করে।

একটি নির্দিষ্ট বোতামের আকারের (পিক্সেলগুলিতে) হার্ড-কোডিংয়ের সংক্ষিপ্ততা, অ্যান্ড্রয়েডকে বলার উপায় কি পটভূমির চিত্রটি মোটেই প্রসারিত না করা এবং তা ক্রপ করুন বা প্যাড করুন?

উত্তর:


29

আপনি যদি চিত্রটি না প্রসারিত করতে চান তবে আপনার ব্যবহার করা উচিত । পটভূমির চিত্রগুলি সর্বদা দৃশ্যের সাথে মানিয়ে নিতে প্রসারিত হবে। চিত্রের দিকটি বস্তুটিতে বাধ্য করার জন্য আপনাকে এটি একটি ড্রয়যোগ্য হিসাবে সেট করতে হবে।

অন্যথায়, আপনি যদি বাটন ধারণাকে আঁকড়ে ধরে থাকেন তবে চিত্রটি প্রসারিত হওয়া থেকে বাঁচাতে আপনাকে বোতামে স্কেলিংটি জোর করতে হবে।

কোড:

onCreate(Bundle bundle) {
  // Set content layout, etc up here

  // Now adjust button sizes
  Button b = (Button) findViewById(R.id.somebutton);
  int someDimension = 50; //50pixels
  b.setWidth(someDimension);
  b.setHeight(someDimension);
}

1
ধন্যবাদ + ১ ImageViewআকর্ষণীয় দেখাচ্ছে। আমি লক্ষ্য করেছি এটা একটি বৈশিষ্ট্য যে নয় হয়েছে Button: android:cropToPadding। পরিবর্তে কোনও চিত্র ভিউ ব্যবহার করা আমার আপত্তি নেই, যতক্ষণ না এটি রয়েছে setOnClickListener()- যা এটি করে। আমি থেকে সুইচিং দ্বারা হারানোর কী হবে Buttonথেকে ImageView?
ef2011

1
বিটিডাব্লু, আপনার প্রস্তাবিত দ্বিতীয় সমাধানটি চিত্রটি এখনও প্রসারিত করে।
ef2011

আমি স্থির বোতামের আকারটি (পিক্সেলগুলিতে) ব্যবহার করে শেষ করেছি তবে আমি আপনার উত্তরটি গ্রহণ করছি কারণ 1 ম পরামর্শটি কার্যকরী বিকল্প সমাধানের মতো দেখায়।
ef2011

1
@ ef2011 ইমেজভিউয়ের জন্য, এটি একটি পটভূমি চিত্র হিসাবে সেট করবেন না, আপনাকে এটি একটি হিসাবে সেট setDrawableResourceকরতে হবে এবং তারপরে এটি setAdjustViewBoundsসত্য হয়ে গেছে তা নিশ্চিত করতে হবে
ড। জে

9
পঙ্গু সমাধানের জন্য অবহেলিত। এখানে সঠিক সমাধান: stackoverflow.com/a/9362168/145046
এলেকস এন।

260

আপনি একটি এক্সএমএল বিটম্যাপ তৈরি করতে পারেন এবং এটি দেখার জন্য পটভূমি হিসাবে ব্যবহার করতে পারেন। প্রসারিত রোধ করতে আপনি android:gravityগুণাবলী নির্দিষ্ট করতে পারেন ।

উদাহরণ স্বরূপ:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/dvdr"
    android:tileMode="disabled" android:gravity="top" >
</bitmap>

চিত্রটির রেন্ডারিং কাস্টমাইজ করতে আপনি অনেকগুলি বিকল্প ব্যবহার করতে পারেন

http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap


দারুণ উত্তর বন্ধু!
কার্নাল

3
ইমেজভিউজ ব্যবহার করা একটি কার্যতালিকা যা সর্বদা সম্ভাব্য বিকল্প নয় - আমি
এটির

3
আমি রান সময় ব্যাকগ্রাউন্ড সেট করছি। রান টাইমে বিটম্যাপ তৈরির কোনও সমাধান?
বিবেক কুমার শ্রীবাস্তব

1
আমার জন্য এটি সর্বোত্তম সমাধান ছিল তবে "মাধ্যাকর্ষণ" বৈশিষ্ট্যটি মুছে ফেলা হয়েছে, এটি এটির ডিফল্ট মান "পূরণ" এর সাথে মিলে যায়। এটি চিত্রের পুনরায় আকারটি স্ক্রিনে ফিট করতে দেয়। আরও তথ্যের জন্য @ সন্তোষ লিঙ্কটি অধ্যয়ন করুন। ধন্যবাদ!
হুগো

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

25

কেবল সমস্যার সমাধানের ImageButtonপরিবর্তে ব্যবহার করা Button

<ImageButton android:layout_width="30dp"
             android:layout_height="30dp"
             android:src="@drawable/bgimage" />

এবং আপনি সেট করতে পারেন

android:background="@null"

আপনি চাইলে বোতামের পটভূমি সরাতে।

দ্রুত ঠিক করা !! :-)


1
এবং তারপরে চিত্রটি সেটআইমেজআরসোর্স () পদ্ধতি দিয়ে সেট করুন ... যা আমার পক্ষে কাজ করেছিল।
আর্লোমিডিয়া

আমি একটি বোতামে চিত্র এবং পটভূমি রঙ উভয়ই চেয়েছিলাম ... এটি মনোমুগ্ধকর মতো কাজ করেছিল
অভিষেক চৌহান

এটি আমার জন্য আরও নির্ভুলভাবে কাজ করে (উদাহরণস্বরূপ - "লেআউট_সেন্টার্ট ভার্টিকাল")।
ম্যাক্সিম ফিরসফ

11

আমি একটি রিলেটিভ লাইআউটে এমন একটি চিত্রদর্শন ব্যবহার করছি যা আমার স্বাভাবিক বিন্যাসের সাথে ওভারল করে। কোনও কোডের প্রয়োজন নেই। এটি চিত্রটি স্ক্রিনের পুরো উচ্চতায় (বা অন্য কোনও লেআউট আপনি ব্যবহার করেন) আকার দেয় এবং তারপরে চিত্রটি বাম এবং ডান প্রস্থের সাথে ফিট করে crops আমার ক্ষেত্রে, ব্যবহারকারী যদি স্ক্রিনটি ঘুরিয়ে দেয় তবে ছবিটি খুব সামান্য হতে পারে। অতএব আমি ম্যাচ_পিতা ব্যবহার করি যা খুব ছোট হলে চিত্রটি প্রস্থে প্রসারিত করবে।

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/main_backgroundImage"
        android:layout_width="match_parent"
        //comment: Stretches picture in the width if too small. Use "wrap_content" does not stretch, but leaves space

        android:layout_height="match_parent"
        //in my case I always want the height filled

        android:layout_alignParentTop="true"
        android:scaleType="centerCrop"
        //will crop picture left and right, so it fits in height and keeps aspect ratio

        android:contentDescription="@string/image"
        android:src="@drawable/your_image" />

    <LinearLayout
        android:id="@+id/main_root"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    </LinearLayout>

</RelativeLayout>

এটি যে সমস্যার অস্তিত্ব নেই তার পক্ষে এটি অনেক সহজ সমাধান
osকোস নিখাজি

6

আমার একই সমস্যা ছিল: আপনার মূল চিত্রের পরিবর্তে আপনার কেবল 9-প্যাচ চিত্র (.9.png) ব্যবহার করা উচিত।

সার্জ


5

অঙ্কন 9 প্যাচ ব্যবহার করুন ... অ্যান্ড্রয়েড স্টুডিওর এসডিকে সরঞ্জামগুলির মধ্যে অন্তর্ভুক্ত। আপনি আপনার চিত্রের প্রসারিত ক্ষেত্রগুলি সংজ্ঞায়িত করতে পারেন। গুরুত্বপূর্ণ অংশগুলি সীমাবদ্ধ এবং চিত্রটি সমস্ত pedদ্ধ দেখাচ্ছে না। ড্র 9 প্যাচে একটি ভাল ডেমো এখানে

আপনার বিদ্যমান splash.png কে new_splash.9.png এ পরিবর্তন করতে অঙ্কনপ্যাচটি ব্যবহার করুন, অঙ্কনযোগ্য-এইচডিপিআই প্রকল্প ফোল্ডারে new_splash.9.png এ টানুন নিশ্চিত করুন যে অ্যান্ড্রয়েড ম্যানিফেস্ট এবং স্টাইলস.এক্সএমএল নীচের মতো যথাযথ:

Andro আইডি:

<application
...
        android:theme="@style/splashScreenStyle"
>

styles.xml:

<style name="splashScreenStyle" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowBackground">@drawable/new_splash</item>
</style>

3

আমার একটি ব্যাকগ্রাউন্ড চিত্র ছিল, আকারে বড় নয়, তবে অদ্ভুত মাত্রাগুলি সহ - তাই প্রসারিত এবং খারাপ অভিনয়। আমি পরামিতি প্রসঙ্গ, একটি ভিউ এবং একটি অঙ্কনযোগ্য আইডি (ইন্ট) দিয়ে একটি পদ্ধতি তৈরি করেছি যা ডিভাইসের স্ক্রিন আকারের সাথে মেলে। ব্যাকগ্রাউন্ড সেট করতে উদাহরণস্বরূপ ফ্রেমস অনক্রিট ভিউতে এটি ব্যবহার করুন।

public void setBackground(Context context, View view, int drawableId){
    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),drawableId);

    bitmap = Bitmap.createScaledBitmap(bitmap, Resources.getSystem().
             getDisplayMetrics().widthPixels,
             Resources.getSystem().getDisplayMetrics().heightPixels,
             true);

    BitmapDrawable bitmapDrawable = new BitmapDrawable(context.getResources(), 
                                    bitmap);

    view.setBackground(bitmapDrawable);
}

1

পৃথক এক্সএমএল কনফিগারেশনের প্রয়োজন ছাড়াই প্রোগ্রামোম্যাটিকভাবে তৈরি বোতামগুলির জন্য সন্তোষের উত্তরের একটি সংস্করণ এখানে রয়েছে:

Button button = new Button(getContext());
Bitmap backgroundBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_button);
BitmapDrawable backgroundDrawable = new BitmapDrawable(getResources(), backgroundBitmap);
backgroundDrawable.setGravity(Gravity.CENTER); // also LEFT, CENTER_VERTICAL, etc.
backgroundDrawable.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP));
button.setBackground(backgroundDrawable);

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


1

আপনি একটি ব্যবহার করতে পারেন FrameLayoutএকটি সঙ্গে ImageViewপ্রথম সন্তান, দ্বিতীয় শিশু হিসাবে তারপর আপনার স্বাভাবিক বিন্যাস হিসাবে:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

  <ImageView
        android:id="@+id/background_image_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/your_drawable"/>

  <LinearLayout
        android:id="@+id/your_actual_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

  </LinearLayout>

</FrameLayout>

0

কীটি হ'ল ব্যাকগ্রাউন্ড হিসাবে নয়, বোতামের চিত্র হিসাবে অঙ্কনযোগ্য সেট করা। এটার মত:

rb.setButtonDrawable(R.drawable.whatever_drawable);

এটি কম্পাউন্ড বাটনের একটি পদ্ধতি কিন্তু বোতামের নয়।
arlomedia

0

যে কেউ তার এক্সএমএলে একটি সরল ইমেজভিউ ব্যবহার করতে এবং এটিকে ক্লিকযোগ্য করে তোলা যায় (অ্যান্ড্রয়েড: ক্লিকযোগ্য = "সত্য")? আপনাকে কেবল এসআরসি হিসাবে ব্যবহার করতে হবে যা একটি বোতামের মতো আকারের হয়েছে অর্থাৎ গোলাকার কোণে।

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