ডিফল্টরূপে প্রগতিবারের বারের উপরে এবং নীচে একটি নির্দিষ্ট প্যাডিং থাকে। এই প্যাডিংটি সরিয়ে দেওয়ার কোনও উপায় আছে যাতে কেবল শেষদিকে বারটি থাকে?
android:minHeight="4dp"
ডিফল্টরূপে প্রগতিবারের বারের উপরে এবং নীচে একটি নির্দিষ্ট প্যাডিং থাকে। এই প্যাডিংটি সরিয়ে দেওয়ার কোনও উপায় আছে যাতে কেবল শেষদিকে বারটি থাকে?
android:minHeight="4dp"
উত্তর:
এই সমস্যাটির জন্য আমি নিম্নলিখিতটি একটি কার্যকারণ হিসাবে ব্যবহার করি।
android:layout_marginBottom="-8dp"
android:layout_marginTop="-4dp"
android:layout_marginTop="-6dp"
আমার জন্য কাজ। এটি ডিভাইসের উপর নির্ভরশীল কিনা তা ভাবছেন? আমি কেবল এক্সপিরিয়া জেড 1
Framelayout
( এই উত্তরটির মতো আরও ভাল সমাধান এবং ফোনের আকার / প্রকার / ওএস সংস্করণের উপর নির্ভর করে না
এইভাবে আমি জুজাসের উত্তরটি ব্যবহার করেছি:
আমার উচ্চতা ProgressBar
4dp হয়। তাই আমি একটি নির্মিত FrameLayout
উচ্চতা 4dp ও সেট layout_gravity
এর ProgressBar
জন্য center
। এটি একটি কবজির মতো কাজ করে।
<FrameLayout
android:layout_width="match_parent"
android:layout_height="4dp">
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_gravity="center"
android:indeterminate="true"/>
</FrameLayout>
আমি এই সমস্যাটি সমাধান করার জন্য একটি কাস্টম লাইব্রেরি ব্যবহার করে শেষ করেছি। অন্যান্য সমাধানগুলির বেশিরভাগই কাজ করে তবে ফলাফল বিভিন্ন ডিভাইসের সাথে সামঞ্জস্যপূর্ণ নয়।
MaterialProgressBar
- অ্যান্ড্রয়েড 4.0+ এ নিয়মিত উপস্থিতি।
- প্ল্যাটফর্ম জুড়ে টিংটিং সঠিক করুন।
- ফ্রেমওয়ার্ক অগ্রগতি বারের অভ্যন্তরীণ প্যাডিং অপসারণ করতে সক্ষম।
- ফ্রেমওয়ার্ক অনুভূমিক প্রগতিবারের ট্র্যাকটি আড়াল করতে সক্ষম।
- ফ্রেমওয়ার্ক প্রগ্রেসবারের জন্য একটি ড্রপ-ইন প্রতিস্থাপন হিসাবে ব্যবহৃত।
গ্রেড নির্ভরতা হিসাবে যুক্ত করতে:
compile 'me.zhanghai.android.materialprogressbar:library:1.1.7'
আপনার বিন্যাসে কোনও অভ্যন্তরীণ প্যাডিং সহ একটি অগ্রগতি বার যুক্ত করতে:
<me.zhanghai.android.materialprogressbar.MaterialProgressBar
android:layout_width="wrap_content"
android:layout_height="4dp"
android:indeterminate="true"
app:mpb_progressStyle="horizontal"
app:mpb_useIntrinsicPadding="false"
style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal" />
app:mpb_useIntrinsicPadding="false"
কৌতুক করে আরও তথ্যের জন্য গিটহাব পৃষ্ঠাটি দেখুন ।
যদি কারও এখনও সহায়তার প্রয়োজন হয় তবে এটি চেষ্টা করে দেখতে পারেন:
<androidx.core.widget.ContentLoadingProgressBar
android:id="@+id/progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline"
android:indeterminate="true"
android:visibility="visible"
app:layout_constraintBottom_toTopOf="@+id/guideline" />
এখানে, প্রগতি দণ্ড ভিতরে ConstraintLayout এবং constraintTop_toTopOf এবং constraintBottom_toTopOf বৈশিষ্ট্যাবলী (এই ক্ষেত্রে, এটা নির্দেশিকা) একই উপাদানে প্রয়োগ করা আবশ্যক।
*** সম্পূর্ণ সমাধান: ***
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="48dp">
<View
android:id="@+id/guideline"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ProgressBar
android:id="@+id/progress_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
app:layout_constraintBottom_toTopOf="@+id/guideline"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline" />
</androidx.constraintlayout.widget.ConstraintLayout>
এমন প্যারেন্টের অভ্যন্তরে উল্লম্ব কেন্দ্রিক প্রগতিবার অঙ্কন করা সম্ভব যা প্যাডিংটি সরিয়ে ফেলবে। যেহেতু প্রগতিবারটি পিতামাতার চেয়ে নিজেকে বড় করে তুলতে পারে না, তাই ক্লিপিং ভিউয়ের ভিতরে রাখতে আমাদের অবশ্যই একটি বড় পিতামাতার তৈরি করতে হবে।
<FrameLayout
android:id="@+id/clippedProgressBar"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="4dp"
tools:ignore="UselessParent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="16dp"
android:layout_gravity="center_vertical">
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:indeterminate="true"/>
</FrameLayout>
</FrameLayout>
এর আক্ষরিক প্যাডিং অপসারণ ProgressBar
করতে, আপনি এর মাধ্যমে করতে পারেন
ProgressBar
উদাহরণ 1 wrap_content রয়েছে ProgressBar
, 1 8dp ProgressBar
, 1 100dpProgressBar
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
...
android:layout_height="8dp"
android:scaleY="2" />
এই সমস্যার একটি সম্পূর্ণ সমাধান নিম্নলিখিত হবে। যদি কারও কোডের টুকরোগুলি দরকার হয় তবে আমি এটি করেছি।
এখানে অগ্রগতি_সীমা নির্ধারণ_হরিজন্টাল_হোলো.এক্সএমএল
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/progressbar_indeterminate_holo1" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo2" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo3" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo4" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo5" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo6" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo7" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo8" android:duration="50" />
শৈলীর সংস্থানগুলি আমার স্থানীয় শৈলীর ফাইলে অনুলিপি করেছে।
<style name="Widget">
<item name="android:textAppearance">@android:attr/textAppearance</item>
</style>
<style name="Widget.ProgressBar">
<item name="android:indeterminateOnly">true</item>
<item name="android:indeterminateBehavior">repeat</item>
<item name="android:indeterminateDuration">3500</item>
</style>
<style name="Widget.ProgressBar.Horizontal">
<item name="android:indeterminateOnly">false</item>
<item name="android:indeterminateDrawable">@drawable/progress_indeterminate_horizontal_holo</item>
</style>
এবং পরিশেষে, আমার স্থানীয় লেআউট ফাইলে ন্যূনতম উচ্চতা 4 ডিপি সেট করুন।
<ProgressBar
android:id="@+id/pb_loading"
style="@style/Widget.ProgressBar.Horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:indeterminate="true"
android:minHeight="4dp"
android:minWidth="48dp"
android:progressDrawable="@drawable/progress_indeterminate_horizontal_holo" />
<your-sdk-folder>/platforms/android-17/data/res/drawable-hdpi/
অনুভূমিক শৈলীর সাথে প্রগতিবার ব্যবহার করার সময় আমি একই সমস্যার মুখোমুখি হয়েছি।
মূল কারণ হ'ল অগ্রগতি বারের জন্য ডিফল্ট 9-প্যাচ অঙ্কনযোগ্য: (অগ্রগতি_বিজি_হোলো_ডार्क ৯.png) প্যাডিং হিসাবে কিছু উল্লম্ব স্বচ্ছ পিক্সেল রয়েছে।
চূড়ান্ত সমাধান যা আমার পক্ষে কাজ করেছে: অগ্রগতিটি অঙ্কনযোগ্য, আমার নমুনা কোডটি নিম্নরূপ করুন:
custom_horizontal_progressbar_drawable.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="#33ffffff" />
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape android:shape="rectangle">
<solid android:color="#ff9800" />
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape android:shape="rectangle">
<solid android:color="#E91E63" />
</shape>
</clip>
</item>
</layer-list>
লেআউট স্নিপেট:
<ProgressBar
android:id="@+id/song_progress_normal"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="5dp"
android:layout_alignParentBottom="true"
android:progressDrawable="@drawable/custom_horizontal_progressbar_drawable"
android:progress="0"/>
একটি কৌশল আপনার অগ্রগতি বারে নেতিবাচক মার্জিন যুক্ত করা add
নীচে এটি আপনার স্ক্রিনের উপরে ধরে ধরে এক্সএমএল কোডের একটি উদাহরণ রয়েছে:
<ProgressBar
android:id="@+id/progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-7dp"
android:layout_marginBottom="-7dp"
android:indeterminate="true" />
সুবিনের উত্তরটি কেবলমাত্র একটিই (বর্তমানে) মনে হয় যা অ্যান্ড্রয়েড প্রগ্রেসবারের ভবিষ্যতে প্রকাশে ভাঙ্গার বিষয় হিসাবে একটি ভঙ্গুর হ্যাক বিষয় নয়।
তবে সম্পদগুলি ভেঙে ফেলা, তাদের সংশোধন করা এবং অনির্দিষ্টকালের জন্য বজায় রাখার সমস্যায় পড়ার পরিবর্তে আমি মেটেরিয়াল প্রোগ্রেস বার লাইব্রেরিটি ব্যবহার করতে বেছে নিয়েছি , যা আমাদের জন্য এটি করে:
<me.zhanghai.android.materialprogressbar.MaterialProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
android:layout_gravity="bottom"
custom:mpb_progressStyle="horizontal"
custom:mpb_showTrack="false"
custom:mpb_useIntrinsicPadding="false"
style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding"
/>
বিল্ড.gradle এ:
// Android horizontal ProgressBar doesn't allow removal of top/bottom padding
compile 'me.zhanghai.android.materialprogressbar:library:1.1.6'
এই প্রকল্পটির একটি দুর্দান্ত ডেমো রয়েছে যা এটির সাথে বিল্ট-ইন প্রগ্রেসবারের মধ্যে পার্থক্য দেখায়।
যদি এখনও কেউ সমাধানের সন্ধান করে তবে - এই মন্তব্যটি দেখুন
সর্বনিম্ন উচ্চতা 4 ডিপি হতে সেট করুন
android:minHeight="4dp"
-
<ProgressBar
android:id="@+id/web_view_progress_bar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="false"
android:max="100"
android:min="0"
android:progress="5"
android:minHeight="4dp"
android:progressTint="@color/vodafone_red"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:progress="60" />
আমি মিনিহাইট এবং সর্বোচ্চ ব্যবহার করি e এটি বিভিন্ন এপিআই সংস্করণে সহায়তা করে।
<ProgressBar
android:id="@+id/progress_bar"
style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxHeight="3dp"
android:minHeight="3dp" />
এটি উভয় ব্যবহার করা প্রয়োজন। এপিআই 23 ভাল কাজ করে
android:layout_height="wrap_content"
android:minHeight="0dp"
তবে নিম্ন এপি সংস্করণগুলি সেই ক্ষেত্রে অগ্রগতি বারের উচ্চতা ম্যাক্সহাইটে বাড়িয়ে তোলে।
নিম্নলিখিত চেষ্টা করুন:
<ProgressBar
android:id="@+id/progress_bar"
style="@android:style/Widget.ProgressBar.Horizontal"
android:progress="25"
android:progressTint="@color/colorWhite"
android:progressBackgroundTint="@color/colorPrimaryLight"
android:layout_width="match_parent"
android:layout_height="4dp" />
... এবং তারপরে আপনার প্রয়োজন অনুসারে প্রগতি বারটি কনফিগার করুন কারণ এটি প্রাথমিকভাবে ধূসর অগ্রগতির পটভূমির রঙের সাথে হলুদ বর্ণের অগ্রগতির ছাদের সাথে একটি মাঝারি আকারের বার প্রদর্শন করবে। এছাড়াও, লক্ষ্য করুন যে কোনও উল্লম্ব প্যাডিং নেই।
লিনিয়ারলাউটের অভ্যন্তরে এটি ব্যবহার করুন
<LinearLayout
android:layout_width="match_parent"
android:background="#efefef"
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="gone"
android:layout_marginTop="-7dp"
android:layout_marginBottom="-7dp"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
/>
</LinearLayout>
অ্যান্ড্রয়েড যুক্ত করুন: অগ্রগতি অঙ্কনযোগ্য হিসাবে সংজ্ঞায়িত একটি স্তর-তালিকার জন্য আমার জন্য সমস্যাটি স্থির করে ra এটি একটি কাস্টম অঙ্কনযোগ্য প্রেজ বারকে মাস্কিং করে কাজ করে
https://stackoverflow.com/a/4454450/1145905 এ বর্ণিত উদাহরণ প্রয়োগ
আমি ব্যবহার করছি style="@style/Widget.AppCompat.ProgressBar.Horizontal"
এবং মার্জিনগুলি থেকে মুক্তি পাওয়া মোটামুটি সহজ ছিল। স্টাইলটি হ'ল:
<item name="progressDrawable">@drawable/progress_horizontal_material</item>
<item name="indeterminateDrawable">@drawable/progress_indeterminate_horizontal_material</item>
<item name="minHeight">16dip</item>
<item name="maxHeight">16dip</item>
আমি কেবল সর্বনিম্ন / সর্বাধিক উচ্চতাটিকে ছাড়িয়েছি:
<ProgressBar
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="2dp"
android:indeterminate="true"
android:minHeight="2dp"
android:maxHeight="2dp" />
কোনও নতুন মডিউল ডাউনলোড করতে বা আপনার অগ্রগতি বারের চারপাশে ফ্রেমলআউট লাগানোর প্রয়োজন নেই। এই সব ঠিক হ্যাক। মাত্র 2 টি পদক্ষেপ:
আপনার যাইহোক। এক্সএমএলে
<ProgressBar
android:id="@+id/workoutSessionGlobalProgress"
android:layout_width="match_parent"
android:layout_height="YOUR_HEIGHT"
android:progressDrawable="@drawable/progress_horizontal"
android:progress="0"
<!-- High value to make ValueAnimator smoother -->
android:max="DURATION * 1000"
android:indeterminate="false"
style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal"/>
অগ্রগতি_হরিজন্টাল.এক্সএমএল, আপনার পছন্দ অনুযায়ী মান পরিবর্তন করুন।
গোলাকার কোণগুলি পছন্দ করবেন না?
কোণার ব্যাসার্ধ সরান
রং পছন্দ না? রং বদলাও ইত্যাদি!
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#ff9d9e9d"
android:centerColor="#ff5a5d5a"
android:centerY="0.75"
android:endColor="#ff747674"
android:angle="270"
/>
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#80ffd300"
android:centerColor="#80ffb600"
android:centerY="0.75"
android:endColor="#a0ffcb00"
android:angle="270"
/>
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#ffffd300"
android:centerColor="#ffffb600"
android:centerY="0.75"
android:endColor="#ffffcb00"
android:angle="270"
/>
</shape>
</clip>
</item>
</layer-list>
সাধারণত, আপনার পছন্দ না এমন কোনও কিছুর কোড পরিবর্তন করার জন্য এই পদক্ষেপগুলি। কেবল উত্স কোডটি সন্ধান করুন এবং কী পরিবর্তন করবেন তা নির্ধারণ করুন। আপনি যদি প্রগতিবার উত্স কোডটি অনুসরণ করেন তবে আপনি প্রগ্রেস_হরিজন্টল.এক্সএমএল নামে একটি ফাইল পাবেন যা এটি উল্লেখ করে। মূলত আমি কীভাবে আমার সমস্ত এক্সএমএল সমস্যাগুলি সমাধান করি।
<ProgressBar
android:layout_marginTop="-8dp"
android:layout_marginLeft="-8dp"
android:layout_marginRight="-8dp"
android:id="@+id/progress_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="4dp"
android:indeterminate="false"
android:indeterminateTint="@color/white"
android:max="100"
android:paddingStart="8dp"
android:paddingRight="0dp"
android:progressDrawable="@drawable/progress_bg" />
<androidx.core.widget.ContentLoadingProgressBar
android:id="@+id/progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:indeterminate="true"
android:paddingTop="2dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
কেবল ম্যাটেরিয়াল প্রগ্রেস ইন্ডিকেটর ব্যবহার করুন যার কোনও লুকানো মার্জিন নেই।
<com.google.android.material.progressindicator.ProgressIndicator
android:id="@+id/progressBar"
style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:indicatorColor="@color/colorPrimary"
app:trackColor="@color/colorAccent" />
একটি সাধারণ নো ট্রিকস সমাধান যা অ্যান্ড্রয়েডের যে কোনও সংস্করণের সাথে সামঞ্জস্যপূর্ণ এবং বাহ্যিক লাইব্রেরিগুলির প্রয়োজন হয় না তার ভিতরে ProgressBar
দুটি সাথে নকল হয় । এটিই আমি শেষ করেছি। দেখতে বেশ ঝরঝরে এবং এই পদ্ধতিটি বেশ নমনীয় - আপনি এটিকে ফানকি উপায়ে প্রাণবন্ত করতে পারেন, পাঠ্য যোগ করতে পারেন etc.Views
LinearLayout
লেআউট:
<LinearLayout
android:id="@+id/inventory_progress_layout"
android:layout_width="match_parent"
android:layout_height="4dp"
android:orientation="horizontal">
<TextView
android:id="@+id/inventory_progress_value"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/inventory_progress_remaining"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
কোড:
public void setProgressValue(float percentage) {
TextView progressValue = (TextView) findViewById(R.id.inventory_progress_value);
TextView progressRemaining = (TextView) findViewById(R.id.inventory_progress_remaining);
LinearLayout.LayoutParams paramsValue = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
LinearLayout.LayoutParams paramsRemaining = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
paramsValue.weight = (100 - percentage);
paramsRemaining.weight = percentage;
progressValue.setLayoutParams(paramsValue);
progressRemaining.setLayoutParams(paramsRemaining);
}
ফলাফল (কিছু উচ্চতা যোগ করা সহ):
সবচেয়ে ভাল সমাধান হওয়া উচিত
android:minHeight="0dp"
কোন workaround এবং কবজ মত কাজ করে না।
minHeight
এটি 0 এর চেয়ে বড় (সম্ভবত 32dp বলুন) পূর্বনির্ধারিত। এই সম্পত্তি পরিবর্তন করে আপনি একটি অন্য চেহারা পাবেন।
maxHeight
, কাজ করে না।