Magento2: How to set product wise different layout

Yes you can achieve this thing by writing small code

What you can do is add add layout via event layout_load_before, you can use this event to add your dynamic layout.

Here is sample code for you, please modify as per your need

what you can do is create events.xml in your module


<?xml version="1.0"?>
<config xmlns:xsi="" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <!-- for diffrentiate layout.xml on product basis -->
    <event name="layout_load_before">
        <observer name="load_custom_handler" instance="[Vendor]\[Module]\Observer\LayoutLoadBefore" />

In your [Vendor]\[Module]\Observer\LayoutLoadBefore.php file write below code


namespace [Vendor]\[Module]\Observer;

class LayoutLoadBefore implements \Magento\Framework\Event\ObserverInterface
     * @var \Magento\Framework\Registry
    protected $registry;

    public function __construct(
       \Magento\Framework\Registry $registry,
        $this->registry = $registry;

    public function execute(\Magento\Framework\Event\Observer $observer)
        $product = $this->registry->registry('current_product');

        if (!$product) {
          return $this;
        if ($product->getMyvalue()) { // your condition
           $layout = $observer->getLayout();
           $productId = $product->getId(); 

        return $this;

And now go to [Vendor]\[Module]\view\frontend\layout\my_downlodable_view_id_yourProductId.xml file and write your code.

This file only added to your specific condition of product